std:: end (std::valarray)
|
template
<
class
T
>
/* 见下文 */ end ( valarray < T > & v ) ; |
(1) | (自 C++11 起) |
|
template
<
class
T
>
/* 见下文 */ end ( const valarray < T > & v ) ; |
(2) | (自 C++11 起) |
针对
valarray
的
std::end
重载版本返回一个未指定类型的迭代器,该迭代器指向数值数组中最后一个元素之后的位置。
- 满足 mutable LegacyRandomAccessIterator 的要求,
|
(since C++20) |
-
具有成员类型
value_type,其类型为T,且 -
具有成员类型
reference,其类型为T&。
- 满足 常量 LegacyRandomAccessIterator 的要求,
|
(C++20 起) |
-
具有成员类型
value_type,即T,且 -
具有成员类型
reference,即const T&。
从此函数返回的迭代器将在以下两种情况中首先发生时失效:对
v
调用成员函数
resize()
,或
v
的生命周期结束。
目录 |
参数
| v | - | 数值数组 |
返回值
指向数值数组中最后一个元素之后的位置的迭代器。
异常
可能抛出实现定义的异常。
注释
与其他接受
std::valarray
参数的函数不同,
end()
无法接受由涉及 valarray 的表达式可能返回的替换类型(例如表达式模板生成的类型):
std::
end
(
v1
+
v2
)
不具备可移植性,必须改用
std::
end
(
std::
valarray
<
T
>
(
v1
+
v2
)
)
。
此函数的意图是让 范围for循环 能够处理valarray,而非提供容器语义。
示例
#include <algorithm> #include <iostream> #include <valarray> int main() { const std::valarray<char> va { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'C', '+', '+', '!', '\n' }; std::for_each(std::begin(va), std::end(va), [](char c){ std::cout << c; }); }
输出:
Hello, C++!
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 2058 | C++11 |
1.
end()
被要求支持替换类型
2. 未说明返回的迭代器何时失效 |
1. 不再要求
2. 已明确说明 |
参见
|
(C++11)
|
重载
std::begin
(函数模板) |