记录C++11,auto遇到的坑

 操作vector的时候,用迭代器,需要写好多代码,特别长。

好在C++11 有了auto,然后就想着省事:通过扫描一遍vector,然后改变里面的值。

直到遇到了bug, 才发现auto不能改变,只能遍历读取。

 

#include
#include

using namespace std;

struct test
{
	int a;
	char c;
	bool flag = false;
};
int main()
{

    vector 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::iterator it = vec.begin();
    while(it != vec.end())
    {
        cout << it->flag << endl;
        ++it; // 这里很容易忘记
    }

    // 还有一个迭代器,只能遍历,不能修改。

	system("pause");
 	return 0;
}

 

你可能感兴趣的:(C++,数据结构与算法)