istreambuf_iterator クラス
istreambuf_iterator クラス テンプレートは、入力ストリーム バッファーから文字要素を抽出する入力反復子オブジェクトを表します。これには、basic_streambuf
<CharType, Traits> へのポインター型の、格納されたオブジェクトを介してアクセスします。
構文
template <class CharType class Traits = char_traits <CharType>>
class istreambuf_iterator
: public iterator<input_iterator_tag, CharType, typename Traits ::off_type, CharType*, CharType&>
パラメーター
CharType
istreambuf_iterator の文字型を表す型。
Traits
istreambuf_iterator の文字型を表す型。 この引数は省略可能であり、既定値は char_traits
<CharType> です。
解説
istreambuf_iterator クラスは入力反復子の要件を満たす必要があります。
null 以外の格納されたポインターを使用して istreambuf_iterator クラスのオブジェクトを構築またはインクリメントすると、オブジェクトは、関連付けられている入力ストリームから CharType 型のオブジェクトを効果的に抽出および格納することを試行します。 ただし、オブジェクトが逆参照またはコピーされるまで、抽出が遅れる可能性があります。 抽出が失敗した場合、オブジェクトは効果的に格納されたポインターを null ポインターに置き換え、シーケンス終端のインジケーターを作成します。
コンストラクター
コンストラクター | 説明 |
---|---|
istreambuf_iterator | 入力ストリームから文字を読み取るために初期化される istreambuf_iterator を構築します。 |
Typedefs
型名 | 説明 |
---|---|
char_type | ostreambuf_iterator の文字型を提供する型。 |
int_type | istreambuf_iterator の整数型を提供する型。 |
istream_type | istream_iterator のストリーム型を提供する型。 |
streambuf_type | istreambuf_iterator のストリーム型を提供する型。 |
traits_type | istream_iterator の文字特性型を提供する型。 |
メンバー関数
メンバー関数 | 説明 |
---|---|
equal | 2 つ入力ストリーム バッファー反復子の等価性をテストします。 |
演算子
演算子 | 説明 |
---|---|
operator* | 逆参照演算子は、ストリーム内の次の文字を返します。 |
operator++ | 入力ストリームから次の文字を返すか、オブジェクトをインクリメントする前にオブジェクトをコピーして、そのコピーを返します。 |
要件
ヘッダー: <iterator>
名前空間: std
istreambuf_iterator::char_type
ostreambuf_iterator
の文字型を提供する型。
typedef CharType char_type;
解説
この型は、テンプレート パラメーター CharType のシノニムです。
例
// istreambuf_iterator_char_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
#include <algorithm>
int main( )
{
using namespace std;
typedef istreambuf_iterator<char>::char_type CHT1;
typedef istreambuf_iterator<char>::traits_type CHTR1;
cout << "(Try the example: 'So many dots to be done'\n"
<< " then an Enter key to insert into the output,\n"
<< " & use a ctrl-Z Enter key combination to exit): ";
// istreambuf_iterator for input stream
istreambuf_iterator< CHT1, CHTR1> charInBuf ( cin );
ostreambuf_iterator<char> charOut ( cout );
// Used in conjunction with replace_copy algorithm
// to insert into output stream and replace spaces
// with dot-separators
replace_copy ( charInBuf , istreambuf_iterator<char>( ),
charOut , ' ' , '.' );
}
istreambuf_iterator::equal
2 つの入力ストリーム バッファー反復子の等価性をテストします。
bool equal(const istreambuf_iterator<CharType, Traits>& right) const;
パラメーター
right
等価性をチェックする反復子。
戻り値
両方の istreambuf_iterator
がストリームの終わりの反復子であるか、どちらもストリームの終わりの反復子でない場合は true
、それ以外の場合は false
。
解説
範囲は、現在の位置とストリームの末尾反復子に対する istreambuf_iterator
によって定義されますが、すべての非ストリーム反復子は、 equal
メンバー関数の下で等価であるため、 istreambuf_iterator
を使用してサブ範囲を定義することはできません。 ==
演算子と !=
演算子は同じセマンティクスを持ちます。
例
// istreambuf_iterator_equal.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>
int main( )
{
using namespace std;
cout << "(Try the example: 'Hello world!'\n"
<< " then an Enter key to insert into the output,\n"
<< " & use a ctrl-Z Enter key combination to exit): ";
istreambuf_iterator<char> charReadIn1 ( cin );
istreambuf_iterator<char> charReadIn2 ( cin );
bool b1 = charReadIn1.equal ( charReadIn2 );
if (b1)
cout << "The iterators are equal." << endl;
else
cout << "The iterators are not equal." << endl;
}
istreambuf_iterator::int_type
istreambuf_iterator
の整数型を提供する型。
typedef typename traits_type::int_type int_type;
解説
型は、Traits::int_type
の同意語。
例
// istreambuf_iterator_int_type.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>
int main( )
{
using namespace std;
istreambuf_iterator<char>::int_type inttype1 = 100;
cout << "The inttype1 = " << inttype1 << "." << endl;
}
/* Output:
The inttype1 = 100.
*/
istreambuf_iterator::istream_type
istreambuf_iterator
のストリーム型を提供する型。
typedef basic_istream<CharType, Traits> istream_type;
解説
この型は、basic_istream
<CharType, Traits> の同意語です。
例
istream_type
を宣言して使用する方法の例については、istreambuf_iterator に関するセクションをご覧ください。
istreambuf_iterator::istreambuf_iterator
入力ストリームから文字を読み取るために初期化される istreambuf_iterator を構築します。
istreambuf_iterator(streambuf_type* strbuf = 0) throw();
istreambuf_iterator(istream_type& _Istr) throw();
パラメーター
strbuf
istreambuf_iterator
が関連付けられている入力ストリーム バッファー。
_Istr
istreambuf_iterator
が関連付けられている入力ストリーム。
解説
最初のコンストラクターは、入力ストリームバッファー ポインターを strbuf で初期化します。 2 番目のコンストラクターは、入力ストリームバッファー ポインターを _Istr を使用して初期化します。 rdbuf
で初期化してから、最終的に CharType
型のオブジェクトの抽出と格納を試行します。
例
// istreambuf_iterator_istreambuf_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>
int main( )
{
using namespace std;
// Following declarations will not compile:
istreambuf_iterator<char>::istream_type &istrm = cin;
istreambuf_iterator<char>::streambuf_type *strmbf = cin.rdbuf( );
cout << "(Try the example: 'Oh what a world!'\n"
<< " then an Enter key to insert into the output,\n"
<< " & use a ctrl-Z Enter key combination to exit): ";
istreambuf_iterator<char> charReadIn ( cin );
ostreambuf_iterator<char> charOut ( cout );
// Used in conjunction with replace_copy algorithm
// to insert into output stream and replace spaces
// with hyphen-separators
replace_copy ( charReadIn , istreambuf_iterator<char>( ),
charOut , ' ' , '-' );
}
istreambuf_iterator::operator*
逆参照演算子は、ストリーム内の次の文字を返します。
CharType operator*() const;
戻り値
ストリーム内の次の文字。
例
// istreambuf_iterator_operator_deref.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>
int main( )
{
using namespace std;
cout << "Type string of characters & enter to output it,\n"
<< " with stream buffer iterators,(try: 'I'll be back.')\n"
<< " repeat as many times as desired,\n"
<< " then keystroke ctrl-Z Enter to exit program: ";
istreambuf_iterator<char> inpos ( cin );
istreambuf_iterator<char> endpos;
ostreambuf_iterator<char> outpos ( cout );
while ( inpos != endpos )
{
*outpos = *inpos; //Put value of outpos equal to inpos
++inpos;
++outpos;
}
}
istreambuf_iterator::operator++
入力ストリームから次の文字を返すか、オブジェクトをインクリメントする前にオブジェクトをコピーして、そのコピーを返します。
istreambuf_iterator<CharType, Traits>& operator++();
istreambuf_iterator<CharType, Traits> operator++(int);
戻り値
istreambuf_iterator
または、istreambuf_iterator
への参照。
解説
最終的に最初の演算子は、関連付けられている入力ストリームから CharType
型のオブジェクトの抽出と格納を試行します。 2 つ目の演算子は、オブジェクトのコピーを作成して、オブジェクトをインクリメントしてから、そのコピーを返します。
例
// istreambuf_iterator_operator_incr.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>
int main( )
{
using namespace std;
cout << "Type string of characters & enter to output it,\n"
<< " with stream buffer iterators,(try: 'I'll be back.')\n"
<< " repeat as many times as desired,\n"
<< " then keystroke ctrl-Z Enter to exit program: ";
istreambuf_iterator<char> inpos ( cin );
istreambuf_iterator<char> endpos;
ostreambuf_iterator<char> outpos ( cout );
while ( inpos != endpos )
{
*outpos = *inpos;
++inpos; //Increment istreambuf_iterator
++outpos;
}
}
istreambuf_iterator::streambuf_type
istreambuf_iterator のストリーム型を提供する型。
typedef basic_streambuf<CharType, Traits> streambuf_type;
解説
この型は、basic_streambuf
<CharType, Traits> の同意語です。
例
istreambuf_type
を宣言して使用する方法の例については、istreambuf_iterator に関するセクションをご覧ください。
istreambuf_iterator::traits_type
istream_iterator
の文字特性型を提供する型。
typedef Traits traits_type;
解説
この型は、テンプレート パラメーター Traits のシノニムです。
例
// istreambuf_iterator_traits_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
#include <algorithm>
int main( )
{
using namespace std;
typedef istreambuf_iterator<char>::char_type CHT1;
typedef istreambuf_iterator<char>::traits_type CHTR1;
cout << "(Try the example: 'So many dots to be done'\n"
<< " then an Enter key to insert into the output,\n"
<< " & use a ctrl-Z Enter key combination to exit): ";
// istreambuf_iterator for input stream
istreambuf_iterator< CHT1, CHTR1> charInBuf ( cin );
ostreambuf_iterator<char> charOut ( cout );
// Used in conjunction with replace_copy algorithm
// to insert into output stream and replace spaces
// with dot-separators
replace_copy ( charInBuf , istreambuf_iterator<char>( ),
charOut , ' ' , '.' );
}
関連項目
iterator 構造体
<iterator>
C++ 標準ライブラリ内のスレッド セーフ
C++ 標準ライブラリ リファレンス