gpt4 book ai didi

c++ - 指针 vector 的迭代器

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:40 29 4
gpt4 key购买 nike

我阅读了另一篇回答有关指针 vector 迭代器的问题的帖子。我试图在我的代码中使用相同的概念,但我收到了一些编译错误。我的代码基于的代码示例是:

vector<c*> cvect;
cvect.push_back(new sc);
vector<c*>::iterator citer;
for(citer=cvect.begin(); citer != cvect.end(); citer++) {
(*citer)->func();
}

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

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::vector<MyStuff, std::allocator<MyStuff> > >::operator=(const __gnu_cxx::__normal_iterator<MyStuff*, std::vector<MyStuff, std::allocator<MyStuff> > >&)

我也收到一个关于 operator!= 的错误... 另一个 vector 的另一组相同错误。

最佳答案

您忘记取消引用迭代器。试试这个:

vecOne.push_back(new MyStuff( **vec1_itr ));

编辑0:

是的,应该是双重取消引用(上面已修复)。它应该是 const_terator 而不是因为您正在处理包含对象的 const:

vector<MyStuff*>::const_iterator vec1_itr;

关于c++ - 指针 vector 的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5671861/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com