vector <char>对字符串的好处?

Meh*_*dad 14 c++ string stl vector

这个问题是有关,但不完全一样,这个问题.

除了与可读性相关的问题之外,使用std::vector<char>而不是std::string保存任意二进制数据是否有任何好处?

即,与字符串相比,是否有任何使用向量更容易/更有效/更好的任务?

Joe*_*oeG 16

除了可读性(不应低估),我可以想到使用std::stringover时的几个小的性能/内存问题std::vector:

  • 一些现代std::string实现使用小字符串优化.如果您存储的数据大于string内部缓冲区,则会变为悲观,从而降低复制,移动和swap1的效率,并且sizeof()不会增加效益.

  • 一个有效的std::string实现总是会分配至少比当前大小多1个字节来存储终止空值(不这样做需要额外的逻辑operator[]来处理str[size()]).

我应该强调,这两个问题都很小; 它们的性能成本很可能会在背景噪声中丢失.但你确实问过.


1size()如果正在使用小字符串优化,那些操作需要分支,而它们没有良好的std::vector实现.


Meh*_*dad 2

是的,vector<char>确实比 .更多的能力string

与 不同的是stringvector<char> 保证在操作期间保留迭代器、引用等swap。请参阅:可以std::vector利用小缓冲区优化吗?