std :: string是不是std :: vector <char>?

con*_*ong 1 c++ string stl vector

在c ++ primer 5th,9.2.5中.分配和交换,我读到了这个:

元素不移动的事实意味着,除了字符串之外,迭代器,引用和指向容器的指针都不会失效.它们指的是与交换之前相同的元素.

那么,为什么字符串是一个例外?我一直认为字符串是一个向量,是不是真的?

Ker*_* SB 5

你引用的措辞表明字符串不是向量.当您交换两个向量时,迭代器仍然有效并指向新向量.字符串没有类似的要求.这允许字符串使用小缓冲区优化.

它可能更合适,比较basic_stringvector,因为这些都是是在元素类型和参数化分配两个模板.这显示了进一步的差异:basic_string可能只适用于文字类型.并且basic_string还采用第三个参数,即特征,它们决定了如何进行比较.

与向量有共同点的是它们连续存储数据.