之前看完了c++ primer,由于涉及到的知识点挺多的,只好边看边做些笔记,进行总结,方便日后复习。
1. 关于迭代器
const_iterator和const的iterator对象是不同的:声明一个const迭代器时,必须初始化迭代器。一旦被初始化后,就不能改变它的值。例:
const vector<int>::iterator cit=nums.begin(); *cit=1; //ok ++cit; //error<span style="font-size:18px;"></span>
<span style="font-size:12px;">vector<int>::const_iterator it = nines.begin(); *it = 10; // error: *it is const ++it; // ok: it isn't const so we can change its value</span>
而const_iterator对象可以用于const_vector或非const vector,因为不能改写元素值,迭代器这种类型几乎没有用处,一旦它被初始化后,只能用来改写其指向的元素,但不能使它指向其他元素,例:
<span style="font-size:12px;">vector<int>::const_iterator // an iterator that cannot write elements const vector<int>::iterator // an iterator whos value cannot change</span>
迭代器的算数操作:
iter+n 或 iter-n // 对迭代器对象加上或减去一个值,产生一个新的迭代器 iter1-iter2 // 就算两个迭代器对象的距离
任何改变vector长度的操作都会使一存在的迭代器失效,在调用push_back之后,就不能再信赖指向vector的迭代器的值了。
2. size是由库类型string、vector和bitset定义的函数,分别用于返回此三类型的字符个数、元素个数和二进制个数。
string和vector类的size函数返回size_type类型的值(如:string的size返回string::size_type类型值)。
bitset对象的size操作返回size_t类型的值。
size_t是在cstddef头文件中定义的机器相关的无符号整型,该类型足以保存最大数组的长度。
size_type定义为unsigned类型。
3. 标准库bitset
头文件 #include<bitset>
using std::bitset;
和vector类似,bitset类也是一种类模板,但bitset类型对象的区别仅在其长度而不在其类型。定义bitset时,要明确bitset含有多少位,在尖括号内给出它的长度值。
bieset对象的初始化:
(1)用unsigned值初始化bitset对象
(2)用string对象初始化bitset对象:从string对象读入位集的顺序是从右到左,即string对象的最右边字符(下标最大的那个字符)用来初始化bitset对象的低阶位(下标为0的位)。
(3)用字符串的字串初始化bitset
4. 数组定义中的类型名可以是内置数据类型或类类型,除引用之外,数组元素还可以是任意的复合类型,没有所有元素都是引用的数组。数组的维数必须用值大于等于1的常量表达式定义,此常量表达式只能包含整形字面值常量、枚举常量或者用常量表达式初始化的整型const对象。