一、冒号的功能
先看一段代码:
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> mylist;
mylist.push_back(5);
mylist.push_back(6);
mylist.push_back(8);
list<int>::iterator it;
for (it=mylist.begin(); it!=mylist.end(); it++){
cout << *it << " ";
}
cout << endl;
return 0;
}
输出结果很明显,是序列:
5 6 8
将其中的 12-15 行代码替换为:
for (auto element : mylist){
cout << element << " ";
}
cout << endl;
注:auto
关键字用来自动判断数据类型,简化了代码
结果还是一样的 !!!
分析:冒号的作用为,让容器 mylist 中的数据逐个读取到element中(值拷贝,非传引用,因此无法修改容器数据)
二、细节问题
下面用数组来说明传值和传引用的区别:
#include <iostream>
using namespace std;
int main()
{
int a[6] = {
0, 1, 2, 3, 4, 5};
for (auto elem : a){
cout << elem << " ";
}
cout << endl;
for (auto elem : a) elem = 0;
for (auto elem : a) cout << elem << " ";
cout << endl;
for (auto &elem : a) elem = 0;
for (auto elem : a) cout << elem << " ";
cout << endl;
return 0;
}
输出结果为:
0 1 2 3 4 5
0 1 2 3 4 5
0 0 0 0 0 0