std::begin(std::valarray)
template< class T > /* see below */ begin( valarray<T>& v ); |
(1) | (с C++11) |
template< class T > /* see below */ begin( const valarray<T>& v ); |
(2) | (с C++11) |
Перегрузка std::begin для valarray возвращает итератор неопределенного типа, ссылающийся на первый элемент в числовом массиве.
- удовлетворять требованиям изменяемой LegacyRandomAccessIterator,
|
(с C++20) |
- иметь член-тип
value_type, который являетсяT, и - иметь член-тип
reference, который являетсяT&.
- удовлетворять требованиям постоянной LegacyRandomAccessIterator,
|
(с C++20) |
- иметь член-тип
value_type, который являетсяT, и - иметь член-тип
reference, который являетсяconst T&.
Возвращаемый итератор становится недействительным при вызове member function resize() для v или при завершении жизненного цикла v, в зависимости от того, что произойдет раньше.
Параметры
| v | - | числовой массив |
Возвращаемое значение
Итератор на первое значение в числовом массиве.
Исключения
Может выбросить исключение, определённое реализацией.
Примечания
В отличие от других функций, принимающих аргументы std::valarray, begin() не может принимать типы замены (например, типы, возвращаемые выражениями шаблонов), которые могут быть возвращены выражениями, включающими valarrays: std::begin(v1 + v2) не является переносимым, в этом случае следует использовать std::begin(std::valarray<T>(v1 + v2)).
Целью этой функции является возможность работы циклов range for с valarrays, а не предоставление семантики контейнера.
Пример
#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 (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/valarray/begin2