c – 矢量对字符串的好处?

这个问题与 this question有关,但不完全相同.

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

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

解决方法

除了可读性(不应该被低估),我可以想到使用std :: string over std :: vector的几个次要的性能/内存问题:

>一些现代的std :: string实现使用small string optimization.如果你正在存储大于字符串内部缓冲区的数据,它将变得一个悲观,降低了复制,移动和交换1的效率,并增加了sizeof(),从而没有任何好处.
>一个有效的std :: string实现将总是分配至少比当前大小多1个字节来存储一个终止的null(不要这样做需要额外的逻辑在operator []来处理str [size()]).

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

1如果使用小字符串优化,那么这些操作需要在size()上进行分支,而它们不是在一个很好的std :: vector实现中.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...