自定义对象如何支持Range-based循环语法
至少实现以下两种语法:
//返回第一个迭代子的位置
Iterator begin()
//返回最后一个迭代子的下一个位置
Iterator end()
迭代子需要支持如下三种方法:
- operator++(自增)
- operator!= (判不等)
- operator* (解引用)
#include <iostream>
using namespace std;
template<typename T,size_t N>
class A
{
public:A(){for (size_t i =0 ;i<N;++i){m_elements[i] = i;}}~A(){}T* begin(){return m_elements + 0;}T* end(){return m_elements + N;}
private:T m_elements[N];
};
int main()
{A<int, 10> a;for (auto iter: a){std::cout << iter << endl;}
}