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

fre*_*low 6 c++ containers iterator non-member-functions c++11

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

ybu*_*ill 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]);
Run Code Online (Sandbox Code Playgroud)

另请注意,24.6.5说:

除了是通过纳入的可用<iterator>头部,任何以下标题被包括在时的24.6.5函数模板是可用的:<array>,<deque>,<forward_list>,<list>,<map>,<regex>,<set>,<string>,<unordered_map>,<unordered_set>,和<vector>.

  • @Karl,因为对于你可以迭代的所有类型都不可能.如果`c`是一个数组. (7认同)