如何用for_each遍历vector<vector<int>>
时间: 2023-10-22 12:19:13 浏览: 49
可以使用两个for_each嵌套来遍历一个vector<vector<int>>,如下所示:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<vector<int>> v {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
for_each(v.begin(), v.end(), [](vector<int>& innerVec){
for_each(innerVec.begin(), innerVec.end(), [](int& i){
cout << i << " ";
});
cout << endl;
});
return 0;
}
```
输出结果为:
```
1 2 3
4 5 6
7 8 9
```
其中,外层的for_each遍历每一个vector<int>,内层的for_each遍历每一个int元素,并输出其值。注意,lambda表达式中要使用&符号来引用vector<int>和int元素的引用,以便修改其值。
相关问题
std::vector<Face*> faces ; 如何用lambda表达式 遍历
使用lambda表达式遍历std::vector<Face*> faces的方法如下:
```cpp
#include <iostream>
#include <vector>
class Face {
public:
Face(int id) : id(id) {}
int getId() const { return id; }
private:
int id;
};
int main() {
std::vector<Face*> faces;
faces.push_back(new Face(1));
faces.push_back(new Face(2));
faces.push_back(new Face(3));
// 使用lambda表达式遍历faces
std::cout << "遍历faces:" << std::endl;
for_each(faces.begin(), faces.end(), [](Face* face) {
std::cout << face->getId() << " ";
});
std::cout << std::endl;
// 释放Face对象的内存
for (const auto& face : faces) {
delete face;
}
return 0;
}
```
在上述示例中,我们首先定义了一个Face类,其中包含一个成员函数getId()用于返回Face对象的id。然后,我们创建了一个std::vector<Face*> faces,并向其添加了一些Face对象。
使用lambda表达式遍历faces的语法是`for_each(faces.begin(), faces.end(), lambda表达式)`。在lambda表达式中,我们以Face*类型的参数face为输入,并输出face->getId()。
请注意,由于faces中存储的是Face*指针,我们在程序结束前需要手动释放这些指针所指向的内存。
希望这个例子能帮助你理解如何使用lambda表达式遍历std::vector<Face*> faces。如果你还有其他问题,请随时提出。
vector中每一个元素都要乘上float 变量,如何用for_each实现
可以使用 `std::for_each` 结合 lambda 表达式来实现。具体实现如下:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec {1, 2, 3, 4, 5};
float factor = 2.0;
std::for_each(vec.begin(), vec.end(), [factor](int& elem) {
elem *= factor;
});
for (auto elem : vec) {
std::cout << elem << " ";
}
return 0;
}
```
在 lambda 表达式中,我们将 `factor` 作为一个捕获变量(capture variable),并以引用的方式传递给 lambda 表达式中的函数。然后,我们将每个元素都乘以该因子。最后,我们遍历 `vector` 并输出结果。