C++ 向量的自定义迭代器<;结构>;

C++ 向量的自定义迭代器<;结构>;,c++,c++11,vector,struct,iterator,C++,C++11,Vector,Struct,Iterator,假设我有一个struct,如下所示: struct S { int a; string b; //.... }; 我有一个向量,这个struct: vector<S> vect(100); 向量向量(100); 我想让随机访问迭代器指向所有vectint的成员(本例中为a) 如何实现它?只需包装一个std::vector::iterator。除了操作符*之外,所有操作符都可以直接转发,当然它必须返回S::a一种优雅的方法是操作符*重载,直接在结构内

假设我有一个
struct
,如下所示:

struct S
{
    int a;
    string b;
    //....
};
我有一个向量,这个
struct

   vector<S> vect(100);
向量向量(100); 我想让
随机访问迭代器
指向所有
vect
int的成员(本例中为a)
如何实现它?

只需包装一个
std::vector::iterator
。除了
操作符*
之外,所有操作符都可以直接转发,当然它必须返回
S::a

一种优雅的方法是操作符*重载,直接在结构内部:

struct S {
    int a;
    string b;
    inline int operator*() const {
      return a;
    }
};
这样,当您在vector中迭代S元素时,可以通过以下简单方式访问“a”:

std::vector<S*> vect(100);
std::vector<S*>::iterator it = vect.begin();
for(; it != vect.end(); ++it) {
   std::cout << **it;
}
标准:向量向量(100); std::vector::iterator it=vect.begin(); for(;it!=vect.end();++it){
std::cout上描述了您需要实现什么?您尝试过了吗?您的代码在哪里?您在哪里被卡住了?(这应该很像为所有的编写一个迭代器,除了在取消引用时,您将返回一个[
常量
]如果引用Boost库是一个选项,考虑TrimeSyter和.Cux>运算符> <代码>,并且“当然必须通过引用返回S::A”。