std::valarray<T>::end
来自 zh.cppreference.net
iterator end();
|
(1) | (自 C++11 起) |
const_iterator end() const;
|
(2) | (自 C++11 起) |
返回一个指向数值数组中最后一个元素之后一个位置的迭代器。
此函数返回的迭代器在调用成员函数 resize() 于 v 上时,或 v 的生命周期结束时失效,以先发生者为准。
参数
| v | - | 一个数值数组 |
返回值
指向数值数组中最后一个元素之后一个位置的迭代器。
异常
可能抛出由实现定义的异常。
注意
与其他接受 std::valarray 参数的函数不同,end() 无法接受可能从涉及 valarrays 的表达式返回的替换类型(例如由表达式模板产生的类型):(v1 + v2).end() 不可移植,必须使用 std::valarray<T>(v1 + v2).end() 代替。
此函数的目的是允许 基于范围的 for 循环 与 valarrays 配合使用,而不是提供容器语义。
示例
运行此代码
#include <algorithm>
#include <iostream>
#include <valarray>
int main()
{
const std::valarray<char> va
{
'H', 'e', 'l', 'l', 'o',
',', ' ',
'C', '+', '+', '!', '\n'
};
std::for_each(va.begin(), va.end(), [](char c){ std::cout << c; });
}
输出:
Hello, C++!
缺陷报告
以下行为变更缺陷报告已追溯应用于之前发布的 C++ 标准。
| DR | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 2058 | C++11 | 1. end() 被要求支持替换类型2. 未指定返回的迭代器何时失效 |
1. 不要求 2. 已指定 |
| P3016R6 | C++11 | 非成员 end() 函数在范围访问中引入了不一致
|
将 end() 改为成员函数
|
参阅
(C++11) |
获取 valarray 的开始迭代器(公开成员函数) |