基于范围的for循环on vector是一个成员变量

时间:2014-06-13 00:18:23

标签: c++

C ++ 11

使用基于范围的for循环,在作为类成员的std :: vector上迭代的代码是什么?我已经尝试了以下几个版本:

struct Thingy {
  typedef std::vector<int> V;

  V::iterator begin() {
      return ids.begin();
  }

  V::iterator end() {
      return ids.end();
  }

  private:
      V ids;
};

// This give error in VS2013
auto t = new Thingy; // std::make_unique()
for (auto& i: t) {
    // ...
}

// ERROR: error C3312: no callable 'begin' function found for type 'Thingy *'
// ERROR: error C3312: no callable 'end' function found for type 'Thingy *'

2 个答案:

答案 0 :(得分:5)

tThingy *。您没有为Thingy *定义任何函数,您的函数是为Thingy定义的。

所以你必须写:

for (auto &i : *t)

答案 1 :(得分:1)

如果可以,您应该使用“普通”对象:

Thingy t;
for (auto& i: t) {
    // ...
}

或者使用std::unique_ptr然后取消引用指针:

auto t = std::make_unique<Thingy>();
for (auto& i: (*t)) {
    // ...
}