开始(容器)和结束(容器)是否标准化?

时间:2011-07-30 10:28:52

标签: c++ iterator c++11 containers non-member-functions

非成员函数模板begin(container)end(container)是C ++ 0x的一部分吗?如果是这样,他们居住在哪个头文件中?

1 个答案:

答案 0 :(得分:8)

是的,但正如swap在不同的地方定义并依赖于ADL一样,beginend也是如此。 '通用'版本在<iterator>

中定义
// 24.6.5, range access:
template <class C> auto begin(C& c) -> decltype(c.begin());
template <class C> auto begin(const C& c) -> decltype(c.begin());
template <class C> auto end(C& c) -> decltype(c.end());
template <class C> auto end(const C& c) -> decltype(c.end());
template <class T, size_t N> T* begin(T (&array)[N]);
template <class T, size_t N> T* end(T (&array)[N]);

另请注意,24.6.5说:

  

除了通过包含<iterator>标头可用之外,当包含以下任何标头时,24.6.5中的功能模板也可用:<array><deque>,{ {1}},<forward_list><list><map><regex><set><string><unordered_map>和{{ 1}}。