string s1("abcdef");
for (auto c : s1) {
c = toupper(c);
}
cout << s1;//abcdef
for (auto &c : s1) {//注意引用
c = toupper(c);
}
cout << s1;//ABCEDEF
[]接收的参数就是无符号整数类型
&&:c++规定只有当左侧运算对象为真时才会检查右侧运算对象的真假
vector能容纳绝大多数类型的对象作为其要素,但是因为引用不是对象,所以不存在包含引用的vector;
const int& a=i;//引用及其所指向的对象都是常量,即常量引用,更准确地说是对const的引用
- 辨析
vector<int>v(5);//给v初始化容量,得到5个0(值初始化)
vector<int>v(1, 2, 3);//错误的赋值操作
vector<int>v(10,1);//正确的赋值操作,给v,10个1;属于用值构造vector
vector<int>v{ 1,2,3 };//正确的赋值操作;列表初始化该vector
vector<int>v={1,2,3};//正确,同上
vector<int>v = 10;//错误,编译都过不了
//当编译器无法执行列表初始化后,编译器会尝试用默认值初始化vector对象,示例如下:
vector<string>v{ 10 };//正确,v有十个string元素
vector<string>v1{ 10,"hi" };//正确,v有十个hi;
在定义vector对象的时候设定其大小没什么必要,事实上如果这么做性能可能更差。