在C++中,std::for_each
是一个算法,用于遍历容器中的元素并对每个元素执行特定操作。但是,std::for_each
不支持修改容器中的元素。如果您需要修改容器中的元素,可以使用std::transform
算法。
std::transform
接受两个迭代器和一个函数对象,并对容器中的每个元素应用该函数对象。函数对象可以是一个函数指针、一个函数对象或一个Lambda表达式。该算法将修改后的元素存储在另一个容器中,因此需要提供一个输出迭代器。
以下是一个使用std::transform
修改容器中元素的示例:
#include<iostream>
#include<vector>
#include<algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
// 使用Lambda表达式将每个元素乘以2
std::transform(v.begin(), v.end(), v.begin(), [](int i) { return i * 2; });
// 输出修改后的容器
for (int i : v) {
std::cout << i << " ";
}
return 0;
}
输出:
2 4 6 8 10
在上面的示例中,std::transform
将每个元素乘以2,并将结果存储在原始容器中。注意,输出迭代器必须指向原始容器中的元素,而不是一个新的容器中的元素。
如果您需要在遍历容器时修改其中的元素,可以使用std::for_each
和迭代器。例如:
#include<iostream>
#include<vector>
#include<algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
// 使用Lambda表达式将每个元素乘以2
std::for_each(v.begin(), v.end(), [](int &i) { i *= 2; });
// 输出修改后的容器
for (int i : v) {
std::cout << i << " ";
}
return 0;
}
输出:
2 4 6 8 10
在上面的示例中,std::for_each
将每个元素乘以2,并将结果存储在原始容器中。注意,Lambda表达式使用引用int &i
来修改容器中的元素。
领取专属 10元无门槛券
手把手带您无忧上云