<C++> 使用auto遍历无法改变数据本身(已解决)
1. 问题描述
做题时,使用auto来遍历字符串以减少代码量,目标为修改字符串数组中的某一个字符串,代码如下:
int n = 10;
vector<string> str(n);
// str初始化,省略
for(auto s : str){
if(s == "test"){
s = "changed";
}
}
结果输出的时候指定的字符串并没有修改,后面又尝试用相同方法遍历int类型,仍然无法修改。
2. 问题分析与解决
原来使用auto进行遍历时,会为当前遍历到的对象创建一个副本,域中操作的只是此副本,并不会真正改变原始对象的值,若要实现目的,需要加上&:
for(auto &s : str){
if(s == "test"){
s = "changed";
}
}