我想在mfc中将结构集合从一个向量复制到另一个向量。
我的矢量结构
typedef vector<CLog *> CLogData;
typedef vector<CLog * > tLogData;
如何将TYPE CLog *从CLogData复制到tLogData?
此致
KARTHIK
答案 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);
}