如何在Vector中使用复制功能?

时间:2011-03-28 12:21:41

标签: c++ mfc visual-c++

我想在mfc中将结构集合从一个向量复制到另一个向量。

我的矢量结构

     typedef  vector<CLog *> CLogData;

     typedef vector<CLog * > tLogData;

如何将TYPE CLog *从CLogData复制到tLogData?

此致

KARTHIK

3 个答案:

答案 0 :(得分:1)

要将一个向量复制到另一个向量,您可以通过两种方式使用std::copy

1)调整目标矢量大小并通过迭代器复制:

tlogData.clear();
tlogData.resize(CLogData.size());
std::copy(CLogData.begin(), CLogData.end(), tLogData.begin());

2)使用back_inserter:

std::copy(CLogData.begin(), CLogData.end(), std::back_inserter(tLogData));

但是只复制从一个向量到另一个向量的指针 - 指针指向两个向量中的相同对象!


如果您想真正复制对象,则必须创建新对象:

size_t n = CLogData.size();
for (size_t i = 0; i < n; ++i) {
   tLogData.push_back(new CLog(*CLogData[i]));
}

仅当CLog具有复制构造函数时才有效。

答案 1 :(得分:1)

两种类型都是一样的。所以你可以做到

CLogData cl;
tLogData tl;
// todo: fill cl

tl = cl;

答案 2 :(得分:1)

如果你想要CLog*指针的浅表副本,请使用MacGucky给出的答案。如果您需要CLog*指针指向的实际数据的深层副本,则需要在循环中手动执行:

CLogData cl;
tLogData tl;
// fill cl
for(size_t i = 0; i < cl.size(); ++i){
  // invokes the copy ctor of CLog
  CLog* plog = new CLog(*cl[i]);
  tl.push_back(plog);
}