C++ Primer 有感(标准库类型)
1.当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的:
string s1= "hello"; sring s2="world"; string s3=s1 + ", "; //OK string s4 = "hello" + ","; //error string s5 = s1 + "," + "world"; //ok string s6= "hello"+","+s2; //error
2.vector不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector类型的每一种都指定了其保存元素的类型。因此,vector<int>和vector<string>都是数据类型。
3.使用size_type类型时,必须指出该类型是在哪里定义的。vector类型总是包括元素类型:
vector<int>::size_type //OK vector::size_type //error
4.下标操作部添加元素
初学C++的程序员可能会认为vector的下标操作可以添加元素,其实不然:
vector<int> ivec; for (vector<int>::size_type ix= 0;ix != 10;++ix) ivec[ix] = ix;
上述程序试图在ivec中插入10个新元素。但是,这里ivec是空的vector对象,而且下标只能用于获取已存在的元素。
这个循环的正确写法应该是:
for (vector<int>::size_type ix=0;ix != 10;++ix) ivec.push_back(ix);
必须是已存在的元素才能用于下标操作符进行索引。通过下标操作进行赋值时,不会添加任何元素。
5.每个容器类型还定义了一种名为const_iterator的类型,我们可以得到一个迭代器,它自身的值可以改变,但不能用来改变其所指向的元素的值。可以对迭代器进行自增以及使用解引用操作符来读取值,但不能对该元素值赋值。
6.difference_type表示两个迭代器对象的距离(iter1 - iter2 ),difference_type是 signed类型,因为减法运算可能产生负数的结果。该类型可以保证足够大以存储任何两个迭代器对象间的距离。iter1与iter2两者必须都指向同一vector中的元素,或者指向vector末端之后的下一个元素。