c++ vector for for_each 遍历
时间: 2024-10-29 14:18:46 浏览: 13
在 C++ 中,`std::vector` 是一种动态数组容器,它提供了一种高效的方式来存储同类型的元素。当你需要遍历整个 `vector` 并对每个元素执行某种操作时,可以使用 `std::for_each` 这个算法。`for_each` 函数接受一个范围对象(如向量)和一个函数对象(通常是一个 lambda 表达式),并按照顺序应用这个函数到范围内的每一个元素。
下面是一个简单的例子:
```cpp
#include <iostream>
#include <vector>
#include <algorithm> // 包含 std::for_each
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// 使用 for_each 遍历 vector,并打印每个元素的平方
std::for_each(numbers.begin(), numbers.end(), [](int i) {
std::cout << "Square of " << i << ": " << i * i << "\n";
});
return 0;
}
```
在这个例子中,`numbers.begin()` 和 `numbers.end()` 定义了向量元素的起始和结束迭代器范围。lambda表达式 `(i) -> (i * i)` 指定了对每个元素 `i` 应该执行的操作(即计算其平方)。
相关问题
for_each遍历vector中的类
`for_each` 是 C++ 标准库中的一个函数式编程工具,它用于对容器(如 `std::vector`)中的每个元素执行某种操作。当你想要遍历并处理 `vector` 中的对象,而不想关心具体的迭代细节时,可以使用 `for_each` 函数。这个函数通常配合一个 lambda 表达式或函数指针一起使用。
下面是一个简单的例子,假设我们有一个包含自定义对象的 `vector`:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
// 定义一个简单类
class MyClass {
public:
int value;
void print_value() { std::cout << "Value: " << value << '\n'; }
};
int main() {
std::vector<MyClass> vec = {10, 20, 30, 40, 50}; // 假设vec里有MyClass实例
// 使用 for_each 遍历 vector,并打印每个对象的值
auto print_func = [](MyClass& obj) { obj.print_value(); };
std::for_each(vec.begin(), vec.end(), print_func);
return 0;
}
```
在这个例子中,`print_func` 是一个接受 `MyClass` 参照并调用其 `print_value` 成员函数的函数对象。`for_each` 将这个函数作用于 `vec` 的每个元素上。
如何用for_each遍历vector<vector<int>>
可以使用嵌套的for_each函数来遍历vector<vector<int>>。首先,使用for_each遍历外层的vector,然后在每个外层vector元素上使用for_each遍历内层vector。以下是示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<std::vector<int>> vec{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
std::for_each(vec.begin(), vec.end(), [](std::vector<int>& inner_vec) {
std::for_each(inner_vec.begin(), inner_vec.end(), [](int value) {
std::cout << value << " ";
});
std::cout << std::endl;
});
return 0;
}
```
输出结果为:
```
1 2 3
4 5 6
7 8 9
```
在代码中,外层的for_each函数使用lambda表达式来遍历vector的每个元素,内层的for_each函数也使用lambda表达式来遍历每个内部vector的元素。在每个内部vector中,lambda表达式打印出每个元素的值,并在每个内部vector之间输出一个换行符。
阅读全文