我有像这样的数组:
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等.
该标准提供了数组的迭代器:
#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,它对裸指针有效.
| 归档时间: |
|
| 查看次数: |
1133 次 |
| 最近记录: |