cpp*_*cpp 1 c++ iterator friend
我有一个A类和一个简单的(非常有限的)迭代器A_iterator指向这个类并成为它的朋友:
#include<vector>
#include<iostream>
using namespace std;
class A_iterator{
public:
A_iterator(int index) : _index(index) {}
int operator*();
private:
int _index;
};
class A{
friend class A_iterator;
public:
typedef A_iterator iterator;
A() { _elems.push_back(1); _elems.push_back(2); }
private:
static vector<int> _elems; //line 19
};
vector<int> A::_elems; // line 22
int A_iterator::operator*()
{
return A::_elems[_index]; //line 26
}
int main()
{
A a;
A::iterator it(0);
cout << *it << endl; //line 33
}
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,我不希望_elems是静态的.如果我将从第19行删除静态关键字并删除第22行,那么我应该如何修改第26行?第33行无法更改.
是的,友谊static
与非静态数据成员正交.您需要更改迭代器以包含对其迭代的容器的指针/引用,并使用该指针/引用而不是静态成员:
class A;
class A_iterator{
public:
A_iterator(A &container, int index) : _index(index), _container(&container) {}
int operator*();
private:
int _index;
A *_container;
};
//...
int A_iterator::operator*()
{
return _container->_elems[_index]; //line 26
}
int main() {
A a;
A::iterator it(a,0);
std::cout << *it << "\n";
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
785 次 |
最近记录: |