c++ - 如何将字符范围从字符数组复制到 vector ?

标签 c++ stl

如何将字符范围从字符数组复制到 vector ?起始索引始终为 0 并转到某个传递值 x。我在堆上有 char* 缓冲区(大小为 32*1024),我正在使用该缓冲区接收消息并在变量 x 中设置接收到的消息大小。如何从第 0 个到第 x 个字符复制到 vector<char> mainBuffer ? (我可以简单地迭代,但如果消息很长,它看起来效率很低。另一种方法如下所示,但我总是在每次传递中创建新 vector )

char* buffer = new char[32*1024];
int x;
std::vector<std::vector<char> > mainBuffer;
//:loop
// here is some code where I recive message in buffer and set x
mainBuffer.push_back(std::vector<char>(buffer,buffer+x));
//:end loop

有谁知道更高效、更优雅的方法吗?

最佳答案

mainBuffer.push_back(std::vector<char>(buffer,buffer+x));

Does anyone know more efficient and elegant way to do this ?

对于 C++11,做:

mainBuffer.emplace_back( buffer,buffer+x );

这会转发参数并直接在 mainBuffer 中构造对象。

编辑:使用 C++(旧),使用 std::swap:

mainBuffer.push_back( std::vector<char>() );
mainBuffer.back().swap( std::vector<char>(buffer, buffer+x) );

编辑 2:如果可以,在对 mainBuffer 使用 push_back 之前调用 reserve。

关于c++ - 如何将字符范围从字符数组复制到 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13725031/

相关文章:

使用 SWIG 的 C++ 到 C 包装器(用于 FLTK)

c++ - 编写 std::vector 与普通数组的线程安全

c++ - bits/STL_tree.h中_Rb_tree_increment的定义是什么?

C++:迭代器适配器将迭代器限制在一系列迭代器中?

c++ - 在 C++ 中设置实现?

android - 如果 Android NDK 应用程序加载多个共享的 C++ STL 实现,会有什么行为?

C++/生成文件错误 : undefined reference to `main'

c++ - 如何实现 split 函数来分割一行中的单词?

c++ - 从 Makefile 到 Cmake

c++ - 使用kinect计算 body 体积