操作vector的时候,用迭代器,需要写好多代码,特别长。
好在C++11 有了auto,然后就想着省事:通过扫描一遍vector,然后改变里面的值。
直到遇到了bug, 才发现auto不能改变,只能遍历读取。
#include<iostream>
#include<vector>
using namespace std;
struct test
{
int a;
char c;
bool flag = false;
};
int main()
{
vector<test> vec;
test t1;
t1.a = 1;
t1.c = '1';
t1.flag = false;
test t2;
t2.a = 2;
t2.c = '2';
t2.flag = false;
vec.push_back(t1);
vec.push_back(t2);
for (auto i : vec) // 操作失败
{
i.flag = true;
}
for (auto i : vec) // 输出都是false
{
cout << i.flag << endl;
}
for (int i = 0; i < vec.size(); ++i) // 能改变
{
vec[i].flag = true;
}
for (auto i : vec) // 输出都是true
{
cout << i.flag << endl;
}
// 使用迭代器,可以改,也可以输出。
vector<test>::iterator it = vec.begin();
while(it != vec.end())
{
cout << it->flag << endl;
++it; // 这里很容易忘记
}
// 还有一个迭代器,只能遍历,不能修改。
system("pause");
return 0;
}