for (auto& p : data){}
时间: 2024-02-13 21:02:36 浏览: 22
`for (auto& p : data){}`是C++11引入的一种新的for循环写法,也叫做范围for循环(range-based for loop)。它可以在遍历容器(比如`std::vector`、`std::map`等)时,更加简洁、直观地访问容器中的元素。
具体来说,`for (auto& p : data){}`表示对于`data`容器中的每一个元素,都使用一个名为`p`的变量来引用它。可以将`p`的类型声明为自动类型(`auto`),以便让编译器根据容器元素的类型自动推断出`p`的类型。而使用引用(`&`)符号可以避免在循环体中复制容器元素,提高性能。
这种写法在处理容器元素时非常方便,可以避免使用迭代器的繁琐写法。例如,遍历`std::vector`时可以这样写:
```c++
std::vector<int> vec{1, 2, 3, 4, 5};
for (auto& x : vec) {
x += 1; // 对每个元素加1
}
```
遍历`std::map`时可以这样写:
```c++
std::map<std::string, int> myMap{{"apple", 1}, {"banana", 2}, {"orange", 3}};
for (auto& p : myMap) {
std::cout << p.first << " : " << p.second << std::endl; // 输出键值对
}
```
需要注意的是,使用范围for循环时,如果需要修改容器中的元素,建议使用引用(`&`)来声明循环变量,以避免复制元素。