STL克隆载体

时间:2011-02-24 19:55:38

标签: c++ stl vector

嗨! 我很难尝试将指针向量复制到Point。 我有一个

vector<Point*> oldVector

我希望将此向量复制到其他向量中。所以我使用了复制构造函数。我这样做了

vector<Point*> newVector = vector<Point*>(oldVector.begin(),oldVector.end());

不幸的是,如果我运行此功能,我会收到异常/错误。

  

矢量交互者不兼容

可能是什么问题??

EDIT 迭代器必定存在更大的问题,似乎我根本不能使用迭代器。我想在彼此中添加两个stl向量,所以我使用了写这样的

 vector<int> a, b;
    b.insert(b.end(), a.begin(), a.end());

我在执行此行时遇到了sama异常/错误

enter image description here

5 个答案:

答案 0 :(得分:18)

那将是

vector<Point*> *newVector = new vector<Point*>(oldVector.begin(),oldVector.end());

vector<Point*> newVector(oldVector.begin(),oldVector.end());

创建对象时,只能在从堆分配时使用赋值。否则,您只需将构造函数参数放在新变量名后的括号内。

或者,以下内容更为简单:

vector<Point*> newVector(oldVector);

答案 1 :(得分:1)

vector<Point*> newVector = vector<Point*>(oldVector.begin(),oldVector.end());

为什么会这样?

为什么不这样:

vector<Point*> newVector(oldVector.begin(),oldVector.end());

...。后者越好!

更好的是,

vector<Point*> newVector(oldVector);

答案 2 :(得分:0)

你想要

Vector<Point*> newVector(oldVector.begin(), oldVector.end());

答案 3 :(得分:0)

这应该有效(仅使用std::vector<int>测试)。一定有其他一些问题。 Point是否有复制构造函数?

答案 4 :(得分:0)

因为原始容器的类型相同,std::vector<Point*>,所以不需要使用范围构造函数;只需使用复制构造函数!

std::vector<Point*> newVector(oldVector);

但这不是主要关注的问题。这里的主要问题是共享指针。对自己拥有指向数据的人非常清楚。小心双删!