std::istream_iterator
定義於標頭檔案 <iterator> |
||
template< class T, class CharT = char, |
(C++17 前) | |
template< class T, class CharT = char, |
(C++17 起) | |
std::istream_iterator
是一個單通道輸入迭代器,它透過呼叫適當的 operator>> 從它所構造的 std::basic_istream 物件中讀取連續的 T
型別物件。實際的讀取操作在迭代器遞增時執行,而不是在解引用時執行。第一個物件在迭代器構造時讀取。解引用只返回最近讀取物件的副本。
預設構造的 std::istream_iterator
被稱為流結束迭代器。當一個有效的 std::istream_iterator
到達底層流的末尾時,它會變得與流結束迭代器相等。進一步解引用或遞增它將導致未定義行為。即使底層流狀態改變,流結束迭代器也保持在流結束狀態。如果沒有重新賦值,它不能再成為非流結束迭代器。
std::istream_iterator
的典型實現包含兩個資料成員:一個指向相關聯的 std::basic_istream 物件的指標,以及最近讀取的 T
型別值。
T
必須滿足 DefaultConstructible(預設可構造)、CopyConstructible(可複製構造)和 CopyAssignable(可複製賦值)要求。
目錄 |
[編輯] 成員型別
成員型別 | 定義 |
iterator_category
|
std::input_iterator_tag |
value_type
|
T |
difference_type
|
Distance |
pointer
|
const T* |
reference
|
const T& |
char_type
|
CharT
|
traits_type
|
特性
|
istream_type
|
std::basic_istream<CharT, Traits> |
成員型別 |
(C++17 前) |
[編輯] 成員函式
構造一個新的 istream_iterator (公共成員函式) | |
析構一個 istream_iterator ,包括快取值(公共成員函式) | |
返回當前元素 (公共成員函式) | |
前進迭代器 (公共成員函式) |
[編輯] 非成員函式
(在 C++20 中移除) |
比較兩個 istream_iterator (函式模板) |
[編輯] 注意
讀取字元時,std::istream_iterator
預設跳過空白(除非透過 std::noskipws 或等效方式停用),而 std::istreambuf_iterator 則不跳過。此外,std::istreambuf_iterator 更高效,因為它避免了每個字元構造和析構哨兵物件的開銷。
[編輯] 示例
#include <algorithm> #include <iostream> #include <iterator> #include <numeric> #include <sstream> int main() { std::istringstream str("0.1 0.2 0.3 0.4"); std::partial_sum(std::istream_iterator<double>(str), std::istream_iterator<double>(), std::ostream_iterator<double>(std::cout, " ")); std::istringstream str2("1 3 5 7 8 9 10"); auto it = std::find_if(std::istream_iterator<int>(str2), std::istream_iterator<int>(), [](int i){ return i % 2 == 0; }); if (it != std::istream_iterator<int>()) std::cout << "\nThe first even number is " << *it << ".\n"; //" 9 10" left in the stream }
輸出
0.1 0.3 0.6 1 The first even number is 8.
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
P0738R2 | C++98 | 第一次讀取可能會推遲到第一次解引用 | 總是在建構函式中執行 |
[編輯] 另請參閱
寫入std::basic_ostream的輸出迭代器 (類模板) | |
從std::basic_streambuf讀取的輸入迭代器 (類模板) |