开发者

Are begin(container) and end(container) standardized?

开发者 https://www.devze.com 2023-03-24 14:15 出处:网络
Are the non-member function templates begin开发者_StackOverflow(container) and end(container) part of C++0x? If so, in which header file do they live?Yes, but just as swap is defined in different plac

Are the non-member function templates begin开发者_StackOverflow(container) and end(container) part of C++0x? If so, in which header file do they live?


Yes, but just as swap is defined in different places and depends on ADL, so are begin and end. The 'generic' versions are defined in <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]);

Note also that 24.6.5 says:

In addition to being available via inclusion of the <iterator> header, the function templates in 24.6.5 are available when any of the following headers are included: <array>, <deque>, <forward_list>, <list>, <map>, <regex>, <set>, <string>, <unordered_map>, <unordered_set>, and <vector>.

0

精彩评论

暂无评论...
验证码 换一张
取 消