我如何克隆载体?

时间:2011-06-22 04:51:08

标签: c++ networking

我使用vector作为输入缓冲区...

recv = read(m_fd, &m_vbuffer[totalRecv], SIZE_OF_BUFFER);

从输入缓冲区读取所有数据后,它会将数据放入线程池中。

所以我试图克隆这个载体。我想我不能只是将指针传递给向量,因为新的数据包进入并且它会覆盖向量内部的数据。

但是,我找不到克隆载体的方法。请给我一个正确的方法来处理这个问题。如果你们指出使用向量作为输入缓冲区或与此相关的教程的任何问题,我将非常感激...

3 个答案:

答案 0 :(得分:21)

您可以使用其复制构造函数轻松复制矢量:

vector<T> the_copy(the_original); // or
vector<T> the_copy = the_original;

答案 1 :(得分:1)

首先,您可能需要使用&m_vbuffer[0]调用recv。 关于vector的克隆,请使用copy()。

#include <algorithm>
...

vector<char> m_vcopy;
m_vcopy.reserve(m_vbuffer.size());
copy(m_vbuffer.begin(), m_vbuffer.end(), m_vcopy.begin());

但是,请注意该元素不应该被引用。 :)

答案 2 :(得分:0)

正如Nemo指出的那样,您可能想要考虑是否真的需要矢量副本。您可以使用std::swapstd::move(如果使用C ++ 0x)转移内容吗?