vector <struct> </struct>的自定义迭代器

时间:2014-02-20 08:12:34

标签: c++ c++11 vector struct iterator

假设我有struct这样:

struct S
{
    int a;
    string b;
    //....
};

我有一个这个struct的向量:

   vector<S> vect(100);

我希望random_access iterator指向所有vect int的成员(在本例中为a) 我该如何实施呢?

2 个答案:

答案 0 :(得分:2)

只需打包std::vector<S>::iterator。除operator*之外,所有运营商都可以直接转发,当然这必须返回S::a

答案 1 :(得分:1)

一种优雅的方式可能是操作符*重载,直接在struct:

struct S {
    int a;
    string b;
    inline int operator*() const {
      return a;
    }
};

通过这种方式,当你在向量中迭代S元素时,你可以用这种简单的方式访问'a':

std::vector<S*> vect(100);
std::vector<S*>::iterator it = vect.begin();
for(; it != vect.end(); ++it) {
   std::cout << **it;
}

with:

  • * it:您通过迭代器访问元素指针
  • ** it:由于重载而访问元素