c – 指针向量的迭代器

我读了另一篇文章,回答了关于指针向量的迭代器的问题.我尝试在我的代码中使用相同的概念,但我收到一些编译错误.我基于代码代码示例是:
vector<c*> cvect;
cvect.push_back(new sc);
vector<c*>::iterator citer;
for(citer=cvect.begin(); citer != cvect.end(); citer++) {
    (*citer)->func();
}

我想使用类似的概念为具有两个数据成员的类创建深度复制构造函数,这两个数据成员是指向对象的指针.我的代码与此类似:

class MyContainer {
    vector<MyStuff*> vecOne;
    vector<MyStuff*> vecTwo;

 public:
    MyContainer(const MyContainer& other);
};

MyContainer::MyContainer(const MyContainer& other) {
    // copy vector one
    vector<MyStuff*>::iterator vec1_itr;
    for (vec1_itr = other.vecOne.begin(); vec1_itr != other.vecOne.end(); vec1_itr++) {
        vecOne.push_back(new MyStuff(vec1_itr));
    }

    // copy vector two
    vector<MyStuff*>::iterator vec2_itr;
    for (vec2_itr = other.vecTwo.begin(); vec2_itr != other.vecTwo.end(); vec2_itr++) {
        vecTwo.push_back(new MyStuff(vec2_itr));
    }
}

我得到一些编译错误,如:

/path/MyContainer.cpp:38: error: no match for ‘operator=‘ in ‘vec1_Itr = other->MyContainer::vecOne. std::vector<_Tp,_Alloc>::begin [with _Tp = MyStuff*,_Alloc = std::allocator<MyStuff*>]()

candidates are: __gnu_cxx::__normal_iterator<MyStuff*,std::vector<MyStuff,std::allocator<MyStuff> > >& __gnu_cxx::__normal_iterator<MyStuff*,std::allocator<MyStuff> > >::operator=(const __gnu_cxx::__normal_iterator<MyStuff*,std::allocator<MyStuff> > >&)

我也为运算符得到一个错误!= …另一个向量的另一组相同的错误.

解决方法

你忘了取消引用迭代器了.试试这个:
vecOne.push_back(new MyStuff( **vec1_itr ));

编辑0:

是的,应该是双重引用(在上面修复).它应该是const_terator,因为你正在处理包含const的对象:

vector<MyStuff*>::const_iterator vec1_itr;

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...