非成员函数模板begin(container)
和end(container)
是C ++ 0x的一部分吗?如果是这样,他们居住在哪个头文件中?
答案 0 :(得分:8)
是的,但正如swap
在不同的地方定义并依赖于ADL一样,begin
和end
也是如此。 '通用'版本在<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}}。