今天看完了这一章,主要讲了string类,vector容器,迭代器,和bitset类的特点,操作和一些值得注意的地方,string和vector相对于C语言来说更倾向整体的操作,用惯了char类型和数组和指针对于类的操作一下显得有点不适应。下面总结这几个类得一些要注意的地方。
一.string类型;
1.string的size操作返回的是string::size_type类型,不要把size返回值赋给int变量,因为string::size_type是unsigned型的,而int是signed型的所以size_type是int储存长度的两倍,赋给int变量可能会丢失精度。
2.运用string的+操作符时候,左右操作数必须至少有一个是string类型的。例如string s="hello"+" world!"是错误的,两个没有一个是string类型的。
二.vector
1.使用size_type类型时,vector类型总包括vector的元素类型,例如vector<int>::size_type.
2.必须是与存在的元素才能用下标操作符进行索引,通过下标操作进行赋值时,不会添加任何元素,例如:
vector<int> ivec;
for(vector<int>::size_type ix=0;ix!=10;ix++)
ivec[ix]=ix;//错误的 ,下标只能用于已经存在的对象。
正确做法应该是定义时候用vector<int> ivec[10] ,但这样很笨拙,最灵活的是用ivec.push_back(ix);这样不用一开始规定对象的大小。
三.迭代器
1.注意,vector<int>::iterator iter=ivec.end()返回的是vector的末端元素的下一个 而不是 最后的那个元素。
2.const_iterator与const的iterator的区别,简单来说就是const的iteratror当初始化指向了某个vector的元素的时候,他就再也不能指向其他的元素了,但可以修改被他指向的那个元素。而const_iterator可以访问和读取不同的元素。但是不能修改元素的值。
3.迭代器的算术操作有iter+n,iter-n,iter1-iter2.对于最后一个操作是计算两个迭代器对象的距离,返回值是difference_type的signed类型。但是没有两个迭代器相加的操作例如iter1+iter2.
四.bitset
1.用string对象初始化bitset对象的读入的顺序是从右向左的。
2.bitset的count函数返回值类型是size_t的unsigned类型。size_t的定义在头文件cstddef中。