定制迭代器假设我有一个struct
这样的:矢量<struct>
struct S
{
int a;
string b;
//....
};
,我有这个struct
的向量:
vector<S> vect(100);
我想有random_access iterator
指向所有的vect
int的成员(在这种情况下) 我该如何实现它?
定制迭代器假设我有一个struct
这样的:矢量<struct>
struct S
{
int a;
string b;
//....
};
,我有这个struct
的向量:
vector<S> vect(100);
我想有random_access iterator
指向所有的vect
int的成员(在这种情况下) 我该如何实现它?
一种优雅的方式可能是运营商*超载,direcly内部结构:
struct S {
int a;
string b;
inline int operator*() const {
return a;
}
};
这样,当你重复小号元素矢量,您可以访问到 'A' 在这个简单的方法:
std::vector<S*> vect(100);
std::vector<S*>::iterator it = vect.begin();
for(; it != vect.end(); ++it) {
std::cout << **it;
}
有:
只是包装std::vector<S>::iterator
。所有运营商可以直接转发除了operator*
这当然必须返回S::a
而'operator - >',并且“当然必须通过引用*返回S :: a”* –
@TonyD:即使'operator *'也必须,因为'* it = 5'也必须合法。 – MSalters
您需要实现在http://en.cppreference.com/w/说明什么cpp/concept/RandomAccessIterator你试过了吗?你的代码在哪里?你卡在哪里? (它应该与为所有S编写一个迭代器非常相似,除了解引用之外,您将单独返回一个['const']引用到'a'。 –
如果Boost库是一个选项,请考虑transform_iterator。 – jrok