函数模板
<iterator> <array> <deque> <forward_list> <list> <map> <regex> <set> <string> <unordered_map> <unordered_set> <vector>

std::begin

容器 (1)
template <class Container>  auto begin (Container& cont) -> decltype (cont.begin());template <class Container>  auto begin (const Container& cont) -> decltype (cont.begin());
数组 (2)
template <class T, size_t N>  T* begin (T(&arr)[N]);
容器 (1)
template <class Container>  auto begin (Container& cont) -> decltype (cont.begin());template <class Container>  auto begin (const Container& cont) -> decltype (cont.begin());
数组 (2)
template <class T, size_t N>  constexpr T* begin (T(&arr)[N]) noexcept;
指向序列开始的迭代器
返回指向序列第一个元素的迭代器

(1) 容器
函数返回 cont.begin()
(2) 数组
函数返回其参数的 *数组到指针转换*。

如果序列 *为空*,则不应 *解引用* 返回值。

这些函数模板定义在多个头文件中:每个头文件都包含了所有容器和数组类型的通用模板,而不仅仅是特定的重载。这些头文件是:<iterator><array><deque><forward_list><list>map<regex><set><string><unordered_map><unordered_set><vector>

相反,begin 在头文件 <initializer_list><valarray> 中被重载(具有不同的定义)。

参数

cont
一个类类型的对象,其成员 begin 已定义。
arr
一个数组。

返回值

对于 *(1)*,与 cont.begin() 返回的相同。
对于 *(2)*,指向数组第一个元素的指针。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 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;
}

输出
bar contains: 10 20 30 40 50


数据竞争

该参数被访问但未被修改。
调用不会访问序列中的任何元素,但返回的迭代器可用于访问或修改它们。

异常安全

提供与对参数执行的操作相同的保证级别(对于标准容器和数组,这是无异常保证)。

另见