Spec-Zone.ru › C++

std::end(std::valarray)

template< class T > 
/* see below */ end( valarray<T>& v );
(1) (since C++11)
template< class T > 
/* see below */ end( const valarray<T>& v );
(2) (since C++11)

Перегрузка std::end для valarray возвращает итератор неопределённого типа, ссылающийся на элемент, следующий за последним элементом числового массива.

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

Итератор, возвращаемый этой функцией, становится недействительным при вызове метода resize() для v или при завершении жизненного цикла v, в зависимости от того, что произойдёт раньше.

Параметры

v - числовой массив

Возвращаемое значение

Итератор на элемент, следующий за последним элементом числового массива.

Исключения

Может выбросить исключение с определением, зависящим от реализации.

Примечания

В отличие от других функций, принимающих аргументы std::valarray, end() не может принимать типы замещения (например, типы, производимые шаблонами выражений), которые могут быть возвращены выражениями, включающими valarray: std::end(v1 + v2) не является переносимым, вместо него следует использовать std::end(std::valarray<T>(v1 + v2)).

Цель этой функции — позволить циклам range 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++.

DR Применено к Поведение, как опубликовано Правильное поведение
LWG 2058 C++11 1. end() должно было поддерживать типы замещения
2. не было указано, когда возвращаемые итераторы станут недействительными
1. не требуется
2. указано

См. также

std::begin(std::valarray)
(C++11)
перегрузки std::begin
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/valarray/end2

Spec-Zone.ru

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