64,642
社区成员
发帖
与我相关
我的任务
分享
template <class ITEM ,int SIZE>
struct Iteratable {
private:
ITEM mArray[SIZE] ;
public:
Iteratable () = delete ;
ITEM *begin () {
return &mArray[0] ;
}
const ITEM *begin () const {
return &mArray[0] ;
}
ITEM *end () {
return &mArray[SIZE - 1] ;
}
const ITEM *end () const {
return &mArray[SIZE - 1] ;
}
static Iteratable &from (ITEM (&left)[SIZE]) {
return reinterpret_cast<Iteratable &> (left) ;
}
} ;
int main () {
int a[10] ;
for (int i = 0 ; i < 10 ; i++)
a[i] = i ;
for (int &i : Iteratable<int ,10>::from (a))
std::cout << i << " " ;
return 0 ;
}
个人推荐
template<class _Ty,
size_t _Size> inline
_CONST_FUN _Ty *begin(_Ty (&_Array)[_Size]) _NOEXCEPT
{ // get beginning of array
return (_Array);
}
template<class _Ty,
size_t _Size> inline
_CONST_FUN _Ty *end(_Ty (&_Array)[_Size]) _NOEXCEPT
{ // get end of array
return (_Array + _Size);
}
template<class _Container>
auto inline begin(_Container& _Cont) -> decltype(_Cont.begin())
{ // get beginning of sequence
return (_Cont.begin());
}
template<class _Container>
auto inline begin(const _Container& _Cont) -> decltype(_Cont.begin())
{ // get beginning of sequence
return (_Cont.begin());
}
template<class _Container>
auto inline end(_Container& _Cont) -> decltype(_Cont.end())
{ // get end of sequence
return (_Cont.end());
}
template<class _Container>
auto inline end(const _Container& _Cont) -> decltype(_Cont.end())
{ // get end of sequence
return (_Cont.end());
}
C++11标准对这函数的定义// std::begin / std::end example
#include <iostream> // std::cout
#include <vector> // std::vector, std::begin, std::end
int main () {
int foo[] = {10,20,30,40,50};
std::vector<int> bar;
// iterate foo: inserting into bar
for (auto it = std::begin(foo); it!=std::end(foo); ++it)
bar.push_back(*it);
// iterate bar: print contents:
std::cout << "bar contains:";
for (auto it = std::begin(bar); it!=std::end(bar); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
$ g++ -std=c++11 -o test test.cpp
$ ./test
0
1
2
3
4
5
6
7
#include<iostream>
#include<iterator>
using namespace std;
int main()
{
int ia[]={0,1,2,3,4,5,6,7};
auto b = begin(ia); // C++11才允许对数组使用迭代器
auto e= end(ia);
for(auto k=b ; k!=e; ++k)
cout << *k << endl;
return 0;
}