在施工时预留的标准集装箱?
Standard containers that reserve on construction?
我想要一个标准的C++容器用作从网络套接字(即T = byte
或unsigned char
)读取的累加器。我希望容器在构造时保留容量,而不是初始化元素。也就是说,我希望能够做到:
container c(1024);
并让容器保留 1024 个八位字节。一步构造/容量很重要,因为我想在初始值设定项中使用它。
我还想要连续存储。如果容器必须增长,则新存储应该是连续的。
我还希望能够将字节append
到容器中。我希望能够在容器中搜索字节字符串。
vector
和string
并不真正合适,因为构建和储备是两步过程,它们使用额外的分配,并初始化元素。另外,vector
缺少搜索功能。(编辑:vector
很好,感谢<algorithm>
;感谢DYP和Lightness Races in Orbit)。
是否有任何具有这些属性的C++标准容器?
你问错了问题。
标准库没有为每种用途提供容器,而是提供了一系列有用的建筑砖。
如果你想要连续的存储,那么你应该使用std::vector
,并考虑让它符合你的其他要求:
- 非初始化是通过为分配器提供无操作
construct
方法来实现
的 - 搜索模式是通过使用
std::search
或滚动您自己的特定搜索算法来完成的(Knuth Morris Pratt,Boyer Moore,...
无论如何,我建议将vector
封装到具有明确语义角色的专用类中。
相关文章:
- 使用CMake检测支持的C++标准
- 如何理解C++标准N3337中的expr.const.cast子句8
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 编译标准库类型
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 铸造标准::有没有回到原来的类型
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 标准库类型的赋值运算符的引用限定符
- 标准是否严格定义了该程序应该如何编译?
- 如何从Windows应用程序输出到标准?
- 安全到标准:移动会员?
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 这是否符合C++标准:双响双响,例如!!(-0.0).
- 标准::变体的赋值运算符
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 如何在 Mac 上使用 c++17 并行标准库算法?
- 在施工时预留的标准集装箱?
- 标准集装箱的例外要求