在c ++ primer 5th,9.2.5中。分配和交换,我读到了这个:
元素不移动的事实意味着,除了 字符串,迭代器,引用和指向容器的指针 没有失效。它们指的是与之前相同的元素 交换。
那么,为什么字符串是一个例外?我一直认为字符串是一个向量,是不是真的?
答案 0 :(得分:5)
你引用的措辞表明字符串不是向量。当您交换两个向量时,迭代器仍然有效并指向新向量。字符串没有类似的要求。这允许字符串使用小缓冲区优化。
比较basic_string
和vector
可能更合适,因为这些都是在元素类型和分配器上进行参数化的模板。这显示了进一步的差异:basic_string
可能仅适用于文字类型。并且basic_string
还采用第三个参数,即特征,它决定了比较的完成方式。
哪些字符串与向量有共同点是它们连续存储数据。
答案 1 :(得分:3)
std::string
不 a std::vector
。这是一个std::basic_string。
答案 2 :(得分:2)