C++11特性 based for 循环

在C++11之前的版本,若要使用for对一个数组a进行遍历通常这么写:

int a[10] = {0,1,2,3,4,5,6,7,8,9};
for(int i=0; i<10 ;i++)
{
    std::cout << a[i] << std::endl;
}

对一个容器a进行遍历这么写:

std::vector<int> a{0,1,2,3,4,5,6,7,8,9};
for(std::vector<int>::iterator it = a.begin(); it != a.end(); it++)
{
	std::cout << *it << std::endl;
}

但是使用C++11中新添加的based for 循环可以这样写:

int a[10] = {0,1,2,3,4,5,6,7,8,9};
for(auto n : a)
	std::cout << n << std::endl;

std::vector<int> a{0,1,2,3,4,5,6,7,8,9};
for(auto n : a)
	std::cout << n << std::endl;
 

可以发现这极大提高了程序的可读性,但是这种遍历是不能对数组以及容器的值进行修改的,例如:

std::vector<int> a{0,1,2,3,4,5,6,7,8,9};
std::cout << "修改前" << std::endl;
for (auto n : a)
{
	std::cout << n++ <<;
}
 
std::cout<< "修改后" << std::endl;
for (auto m : a)
{
	std::cout << m <<;
}

输出结果为:

修改前
0123456789
修改后
0123456789

可以看到,for循环并未改变值,只对值进行了遍历,如果要遍历容器内的元素的同时又要修改元素的值,就需要将遍历的变量声明为引用类型:

std::vector<int> a{0,1,2,3,4,5,6,7,8,9};
std::cout << "修改前" << std::endl;
for (auto& n : a)
{
	std::cout << n++;
}
 
std::cout<< "修改后" << std::endl;
for (auto m : a)
{
	std::cout << m;
}

输出结果为:

修改前
0123456789
修改后
12345678910

可以看到,容器内的元素每个都加了1。

综上所述,based for 循环的遍历是只读的,除非将变量变量的类型声明为引用类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值