Spec-Zone.ru › C++

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 возвращает итератор неопределенного типа, ссылающийся на первый элемент в числовом массиве.

1) Тип возвращаемого значения должен
  • удовлетворять требованиям изменяемой LegacyRandomAccessIterator,
  • моделировать contiguous_iterator,
(с C++20)
  • иметь член-тип value_type, который является T, и
  • иметь член-тип reference, который является T&.
2) Тип возвращаемого значения должен
  • удовлетворять требованиям постоянной LegacyRandomAccessIterator,
  • моделировать contiguous_iterator,
(с 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. Указано

См. также

std::end(std::valarray)
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API