std::end(std::valarray)
來自 cppreference.com
template< class T > /* 見下文 */ end( valarray<T>& v ); |
(1) | (C++11 起) |
template< class T > /* 見下文 */ end( const valarray<T>& v ); |
(2) | (C++11 起) |
valarray
的 std::end 過載返回一個未指定型別的迭代器,它指向數值陣列中最後一個元素之後的位置。
1) 返回型別必須
- 滿足 可變 LegacyRandomAccessIterator 的要求,
(C++20 起) |
- 有一個成員型別
value_type
,其為T
,以及 - 有一個成員型別
reference
,其為T&
。
2) 返回型別必須
- 滿足 常量 LegacyRandomAccessIterator 的要求,
(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)) 代替。
此函式的目的是允許 範圍 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++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 2058 | C++11 | 1. end() 需要支援替換型別2. 返回的迭代器何時失效未指定 |
1. 不再要求 2. 已指定 |
[編輯] 參閱
(C++11) |
過載 std::begin (函式模板) |