fry*_*guy 6 c++ pointers iterator vector
我读了另一篇文章,回答了关于指针向量的迭代器的问题.我尝试在我的代码中使用相同的概念,但我收到一些编译错误.我基于代码的代码示例是:
vector<c*> cvect;
cvect.push_back(new sc);
vector<c*>::iterator citer;
for(citer=cvect.begin(); citer != cvect.end(); citer++) {
(*citer)->func();
}
Run Code Online (Sandbox Code Playgroud)
我想使用类似的概念为具有两个数据成员的类创建深度复制构造函数,这两个数据成员是指向对象的指针.我的代码与此类似:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
我得到一些编译错误,如:
/path/MyContainer.cpp:38:错误:'
operator='in'vec1_Itr = other->MyContainer::vecOne. std::vector<_Tp, _Alloc>::begin [with _Tp = MyStuff*, _Alloc = std::allocator<MyStuff*>]()' 不匹配候选人是:
__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!=...另一个向量的另一组相同的错误.
您忘记取消引用迭代器。试试这个:
vecOne.push_back(new MyStuff( **vec1_itr ));
Run Code Online (Sandbox Code Playgroud)
是的,应该是双重取消引用(上面已修复)。它应该是const_terator相反,因为你正在处理const包含对象:
vector<MyStuff*>::const_iterator vec1_itr;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6889 次 |
| 最近记录: |