Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 入力イテレータと出力イテレータ | イテレータの基礎
C++ STLイテレータ

book入力イテレータと出力イテレータ

メニューを表示するにはスワイプしてください

Note
定義

入力イテレータと出力イテレータは、ストリームやファイルなどでの逐次的な読み取りや書き込みに使用される単一通過イテレータ。入力イテレータは要素を一度に一つずつ読み取り、出力イテレータは書き込みを行い、一度進めると元に戻ることはできない。

入力イテレータと出力イテレータは、ストリームやデバイスなど一度しか走査できないデータソースで使用される単一通過イテレータ。前方にのみ進み、std::cinからの読み取りやstd::coutへの書き込みなど、線形ストリーム処理に最適。イテレータアダプタを利用して操作する。

main.cpp

main.cpp

copy
123456789101112131415161718
#include <iostream> #include <iterator> #include <vector> #include <algorithm> int main() { std::cout << "Enter integers (end with non-integer): "; std::istream_iterator<int> input_it(std::cin); std::istream_iterator<int> end_it; std::vector<int> numbers(input_it, end_it); std::cout << "Numbers entered: "; std::ostream_iterator<int> output_it(std::cout, " "); std::copy(numbers.begin(), numbers.end(), output_it); std::cout << std::endl; }

上記のコードでは、入力イテレータと出力イテレータがストリームによる単一パストラバーサルを示しています。

  • std::istream_iterator<int> は、std::cin から整数を読み取り、非整数が現れるまで進みます。各値はイテレータが進むごとに一度だけ読み取られます。
  • std::vector の範囲コンストラクタは、イテレータから利用可能なすべての入力を消費し、すでに読み取られた値は再訪できないことを示します。
  • std::ostream_iterator<int> は、各要素をスペースで区切って std::cout に書き込みます。
  • 出力イテレータは書き込みごとに進み、すでに書き込まれた要素を変更または再訪できません
main.cpp

main.cpp

copy
1234567891011121314151617181920212223
#include <iostream> #include <iterator> #include <sstream> int main() { std::istringstream iss("10 20 30"); std::istream_iterator<int> it(iss); std::istream_iterator<int> end; if (it != end) { std::cout << "First value: " << *it << std::endl; ++it; } // Attempt to go back to the first element (not possible) // The following line would try to dereference the advanced iterator if (it != end) std::cout << "Second value: " << *it << std::endl; // Attempting to re-read the first element is not possible // Input iterators do not support multi-pass traversal }

この例は、入力イテレータの主な制限を示しています。要素を読み取りイテレータを進めると、その要素には戻れません。イテレータはストリームを前方に進み、すでに読み取られた値は再訪できません。この単一パスの動作が、入力イテレータと出力イテレータの特徴です。対照的に、フォワードイテレータやランダムアクセスイテレータなどのイテレータ型は、複数回のパスや要素の再訪が可能です。入力イテレータや出力イテレータを使用する場合、各要素が一度だけアクセスされることを前提にアルゴリズムを設計する必要があります。

Note
注意

一部のSTLアルゴリズムのみが入力イテレータおよび出力イテレータで動作します。複数回の走査や要素の並べ替えを必要とするアルゴリズムは、通常、前方イテレータ、双方向イテレータ、またはランダムアクセスイテレータが必要です。例えば、std::copyは入力イテレータから読み取ることができますが、std::sortはランダムアクセスイテレータが必要です。

question mark

入力イテレータの主な制限は何ですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  5

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  5
some-alt