C++ 如何在向量中使用复制函数?

C++ 如何在向量中使用复制函数?,c++,mfc,visual-c++,C++,Mfc,Visual C++,我想在mfc中将结构集合从一个向量复制到另一个向量 我的向量结构是 typedef vector<CLog *> CLogData; typedef vector<CLog * > tLogData; typedef向量克隆数据; typedef向量tLogData; 如何将CLog*类型从CLogData复制到tLogData 问候, Karthik要将一个向量复制到另一个向量,可以通过两种方式使用std::copy: 1) 调整目标向量大小

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

我的向量结构是

     typedef  vector<CLog *> CLogData;

     typedef vector<CLog * > tLogData;
typedef向量克隆数据;
typedef向量tLogData;
如何将CLog*类型从CLogData复制到tLogData

问候,


Karthik

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

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

tlogData.clear();
tlogData.resize(CLogData.size());
std::copy(CLogData.begin(), CLogData.end(), tLogData.begin());
2) 使用背面插入器:

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]));
}
size\u t n=CLogData.size();
对于(尺寸i=0;i

只有当
CLog
具有复制构造函数时,这才有效。

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

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

tlogData.clear();
tlogData.resize(CLogData.size());
std::copy(CLogData.begin(), CLogData.end(), tLogData.begin());
2) 使用背面插入器:

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]));
}
size\u t n=CLogData.size();
对于(尺寸i=0;i

只有当
CLog
具有复制构造函数时,此方法才有效。

这两种类型都是相同的。所以你可以这么做

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

tl = cl;

这两种类型是相同的。所以你可以这么做

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

tl = cl;

如果您想要一份
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);
}
clogdatacl;
tLogData-tl;
//填充cl
对于(大小i=0;i
如果您想要一份
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);
}
clogdatacl;
tLogData-tl;
//填充cl
对于(大小i=0;i
文档中关于
向量的内容是否让您感到困惑?您的意思是需要复制指针所指的对象吗?在向量中存储指针而不是对象有什么原因吗?为什么这里有两个相同的
typedef
s?在
vector
文档中是否有让您困惑的东西?您的意思是需要复制指针所指的对象吗?在向量中存储指针而不是对象有什么原因吗?为什么这里有两个相同的
typedef
s?我喜欢这些。但是它会抛出runtimeerror,它会指向vector.h,错误行是_SCL\u SECURE\u VALIDATE\u RANGE(_Myptr+\u Off\u Getmycont()))->_Mylast&&u Myptr+\u Off>=(((\u Myvec*)(this->\u Getmycont())->\u Myfirst);除非首先调整目标容器的大小,否则需要使用
back\u插入器
迭代器进行
copy
。是的,很抱歉,我忘记了back\u插入器。我更正了我的示例并添加了两种方法。我确实喜欢这些方法。但是它会抛出runtimeerror,它将指向vector.h,错误行是_SCL_SECURE_VALIDATE_RANGE(_Myptr+_Off _Getmycont())->_Mylast&&_Myptr+_Off>=(_Myvec*)(this->_Getmycont())->_Myfirst);除非首先调整目标容器的大小,否则需要使用
back\u插入器
迭代器进行
copy
。是的,很抱歉,我忘记了back\u插入器。我更正了我的示例并添加了两种方法。@Karthik-这不是Java!;)@尼姆我有点确定OP想要一个完整的深度副本,即使指针存储在容器中。@Mark,我也是,我的评论纯粹是与他的评论有关的!:)@这不是Java!;)@尼姆我有点确定OP想要一个完整的深度副本,即使指针存储在容器中。@Mark,我也是,我的评论纯粹是与他的评论有关的!:)