For(auto x : str)是利用x生成str中每一个值的复制,对x的赋值不会影响到原容器。

For(auto &x : str)是利用x生成str中每一个值的引用,对x的操作会影响到原容器。

例子1:For(auto x : str)

#include<bits/stdc++.h>
using namespace std;
int main(){
	string str = "Hello";
	for(auto x : str){// 利用x遍历容器str中的每一个值
		x = tolower(x);
	}
	cout<<str;//仍然是"Hello"
}

例子2:For(auto &x : str)

#include<bits/stdc++.h>
using namespace std;
int main(){
	string str = "Hello";
	for(auto &x : str){// 这里加了&,表示对x的操作可以影响到容器str
		x = tolower(x);
	}
	cout<<str;//变成小写"hello"
}

总结: &x对原容器有影响,x对原容器没有影响

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐