如何将字符数量从char数组复制到vector?起始索引始终为0并转到某个传递值x。我在堆上有char *缓冲区(大小为32 * 1024),我使用该缓冲区接收消息并在变量x中设置接收的消息大小。如何从第0个字符复制到第x个字符到vector<char> mainBuffer
?
(我可以简单地迭代,但如果消息很长,它看起来效率很低。另一种方式如下,但我总是在每次传递中创建新的向量)
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
有没有人知道更有效率和更优雅的方法呢?
答案 0 :(得分:3)
mainBuffer.push_back(std::vector<char>(buffer,buffer+x));
有没有人知道更有效率和更优雅的方法呢?
使用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:如果可以,请在使用push_back之前调用mainBuffer上的reserve。
答案 1 :(得分:1)
如果您真的在寻找效率,那么在协议中执行此操作的典型方法是:
char* mainBuffer = new char[veryLargeNumber]
char* mainBufferPos = mainBuffer;
char* buffer = new char[normallyASmallNumber]
while(...) {
...receive n bytes in buffer....
memcopy(mainBufferPos, buffer, n);
mainBufferPos += n;
if (mainBufferPos > mainBuffer+veryLargeNumber)
break; // buffer full, needs probably more handling...
}
通常情况下,我希望32 * 1024的大小超过大缓冲区的大小,而且你收到的消息的长度大于1024。