C++ Reference: Standard C++ Library reference: Others: iterator: end

发布于:2022-11-15 ⋅ 阅读:(498) ⋅ 点赞:(0)

C++官网参考链接:https://cplusplus.com/reference/iterator/end/

函数模板 
<iterator> <array> <deque> <forward_list> <list> <map> <regex> <set> <string> <unordered_map> <unordered_set> <vector>
std::end
C++11
container (1)    
template <class Container>  auto end (Container& cont) -> decltype (cont.end());
template <class Container>  auto end (const Container& cont) -> decltype (cont.end());
array (2)    
template <class T, size_t N>  T* end (T(&arr)[N]);
C++14
container (1)    
template <class Container>  auto end (Container& cont) -> decltype (cont.end());
template <class Container>  auto end (const Container& cont) -> decltype (cont.end());
array (2)    
template <class T, size_t N>  constexpr T* end (T(&arr)[N]) noexcept;
指向结束的迭代器
返回一个指向序列结束后的元素迭代器:
(1)Container 
函数返回cont.end()。
(2)Array
函数返回arr+N。
如果序列为,则返回值与以相同实参的begin返回的值比较相等。
这些函数模板在多个头文件中定义:每个头文件都包含所有容器和数组类型的泛型模板,而不仅仅是特定的重载。头文件是: <iterator><array><deque><forward_list><list>map, <regex><set><string><unordered_map><unordered_set><vector>
相反,end在头文件<initializer_list><valarray>中重载(使用不同的定义)。

形参 
cont 
定义了成员end的类类型的对象。
arr
一个数组。

返回值
对于(1),与cont.end()返回的值相同。
对于(2),指向数组中最后一个元素后面的元素的指针。

用例
// 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;
}
输出:

数据竞争
访问但不修改实参。
序列中的所有元素都不能被调用访问,但是返回的迭代器可用于访问或修改它们。

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


网站公告

今日签到

点亮在社区的每一天
去签到