std::valarray<T>::begin
来自 zh.cppreference.net
iterator begin();
|
(1) | (自 C++11) |
const_iterator begin() const;
|
(2) | (自 C++11) |
返回指向数值数组中第一个元素的迭代器。
从此函数返回的迭代器在成员函数 resize() 被调用于 v 时,或当 v 的生命周期结束时(以先到者为准)失效。
参数
| v | - | 一个数值数组 |
返回值
指向数值数组中第一个元素的迭代器。
异常
可能抛出实现定义的异常。
注解
与其他接受 std::valarray 参数的函数不同,begin() 不能接受可能由涉及 valarray 的表达式返回的替代类型(例如表达式模板产生的类型):(v1 + v2).begin() 不可移植,必须使用 std::valarray<T>(v1 + v2).begin()。
此函数的意图是允许 基于范围的 for 循环 与 valarray 一起工作,而不是提供容器语义。
示例
运行此代码
#include <algorithm>
#include <iostream>
#include <valarray>
void show(const std::valarray<int>& v)
{
std::for_each(v.begin(), v.end(), [](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. 已指明 |
| P3016R6 | C++11 | 非成员 begin() 函数在范围访问中引入了不一致性
|
将 begin() 改为成员函数
|
参阅
(C++11) |
获取 valarray 的尾后迭代器(公开成员函数) |