for(auto i : v)遍历容器元素
C++11
新增了一种循环:基于范围(range-based)的 for 循环。这简化了一种常见的循环任务:对数组(或容器类,如 vector 和 array 的每个元素执行相同的操作,如下例所示:
double prices[5] = {4.99, 10.99, 6.87, 6.47, 8.88};
for (double x : prices)
std::cout << x << std::endl;
其中,x xx 最初表示数组 prices 的第一个元素。显示第一个元素后,不断执行循环,而 x xx 依次表示数组的其他元素。因此,该循环可以用来显示数组中的每个值。
要修改数组的元素,需要使用不同的循环变量语法:
for (double &x : prices)
x = x * 0.80; //20% off sale
符号 & 表明 x xx 是一个引用变量,能让接下来的代码能够修改数组的内容,而第一种语法不能。
还可结合使用基于范围的 for 循环和初始化列表:
for (int x : {3, 5, 2, 8, 6})
cout << x << " ";
cout << '\n';
这种方式可以引申至 C++11 的另一种新特性 auto,使用 auto 遍历容器的方式,有以下几种:
-
auto
auto 即 for(auto x: range) 这样会拷贝一份 range 元素,而不会改变 range 中元素; -
auto&
当需要修改range中元素,用 for(auto& x: range); -
const auto&
当只想读取 range 中元素时,使用 const auto&,如:for(const auto&x:range),它不会进行拷贝,也不会修改range; -
const auto
当需要拷贝元素,但不可修改拷贝出来的值时,使用 for(const auto x:range),避免拷贝开销。
示例:
using namespace std;
int main() {
int a[] = { 1,2,3,5,2,0 };
vector<int>counts(a,a+6);
for (auto count : counts)
cout<< count<< " ";
cout << endl;
return 0;
}
//输出:1 2 3 5 2 0
标签:容器,遍历,const,auto,元素,c++,range,数组,拷贝 From: https://www.cnblogs.com/drip3775/p/17302865.html