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