C++简单迭代器实现

chr*_*irk 1 c++ iterator

我有像这样的数组:

template<class T> class F
{
   ...
   bool isSet() { return set_; }
   T& GetVal() { return val_; }

private:
   T val_;
   bool set_; 
   ...
}

F<S1> arr1[10];
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个迭代器(或类似迭代器的类)来简化以下内容:

F<S1>* cur = arr1[0];
while(cur.IsSet())
{
   S1* ptr = cur->GetVal();
   // do something with ptr
   cur++;
};
Run Code Online (Sandbox Code Playgroud)

想要更清洁的东西可以使用不同类型的S1,S2等.

Ker*_* SB 8

该标准提供了数组的迭代器:

#include <iterator>

T arr[100];

for (auto it = std::begin(arr), end = std::end(arr); it != end; ++it)
{
    foo(*it);
    it->zap();
}
Run Code Online (Sandbox Code Playgroud)

该类型的it也只是T *,不过这给你一个统一的接口.

术语"迭代器"实际上只是指一个概念,而不是任何特定的代码.裸指针是完全合法的迭代器.重要的是std::iterator_traits提供正确的typedef,它对裸指针有效.