【发布时间】:2018-12-02 22:03:30
【问题描述】:
假设我们有 std::string s 保存一个原始数据缓冲区,但我们想要 std::vector<uint8_t> v 代替。缓冲区长度以百万计。有没有简单的方法让v 窃取s 的内存,从而避免复制缓冲区?
就像 std::vector<uint8_t>::vector(std::string&&) 会做的那样,但以某种方式从 STL 外部做。
或者,是否可以通过与ss.str() 一样高效的操作从std::stringstream ss 获取v?
【问题讨论】:
-
如果向量和字符串都有自定义分配器,你也许可以做类似的事情
-
为什么不首先使用向量作为缓冲区?
-
@Museful 为什么不直接使用
fread? -
哦,那很容易——获取文件的长度——见stackoverflow.com/questions/5840148/…,分配一个合适大小的向量并读入它。但我认为你对所谓的“意图”太着迷了。字符串和字节向量实际上是等价的。
-
std::strings 处理“二进制”数据就好了。
标签: c++ stdvector move-semantics stringstream rvalue-reference