C++

basic_streambuf::setg

C++

basic_streambufのsetpが書き込み位置の情報をセットするものだとすると、setgは読み込み位置の情報をセットするもの。https://ja.cppreference.com/w/cpp/io/basic_streambuf/setg カスタムバッファsetgには、バッファの最初の位置、現在位置、最後の位置を…

basic_streambuf::setp

C++

basic_iostreamなどの入出力ストリーム系のクラスにおいて、バッファはbasic_streambufが管理している。 setpで、バッファにおける書き込み開始位置と書き込み終了位置を指定すると、書き込みの度にbasic_streambufの中で、アクセス位置を変更してくれる。st…

basic_stringstream

C++

以前やったistringstreamとostringstreamの両方の機能を持っているのが、stringstreamであり正体はbasic_stringstream。std::basic_stringstream - cppreference.com複雑だけど、basic_istringstreamとbasic_ostringstreamから継承してるわけではない。 これ…

basic_fstream::is_open

C++

basic_fstream::is_openで、ファイルが開いているか確認する。basic_fstream::is_open - cpprefjp C++日本語リファレンスコンストラクタでtest.txtを開いて、is_openでチェック、読み込んだら、明示的にcloseで閉じて、またis_openでチェック。 $ vi basic_f…

basic_fstream::open

C++

今回は、basic_fstreamのopenでファイルを開く。basic_fstream::open - cpprefjp C++日本語リファレンスios_base::inとios_base::outがデフォルト引数なので、読み書き両方できる。とはいえ、確実に保存しておきたいので閉じている。 $ vi basic_fstream.cpp…

priority_queue

C++

priority_queueは、優先度付きキューとも呼ばれ、指定したロジックによって優先順に要素を取り出せる。priority_queue - cpprefjp C++日本語リファレンス適当に追加しても、値の降順や昇順に取り出すことが出来る。デフォルトは降順で先頭のpque.topに出てく…

basic_fstream

C++

basic_fstreamは、高水準ファイル入出力クラスの基本となるもので、fstreamはこれのchar版。basic_fstream - cpprefjp C++日本語リファレンス std::basic_fstream - cppreference.comファイル入出力と標準入出力の継承関係は結構わかりにくいけど、入出力ラ…

allocator

C++

allocatorは、メモリの確保と解放を行うクラステンプレート。allocator - cpprefjp C++日本語リファレンス アロケータ | Programming Place Plus C++編【標準ライブラリ】 第32章basic_stringなどに、独自のchar_traitsを指定したように、独自のallocator…

char_traits

C++

char_traitsは、文字や文字列の操作を抽象化したクラステンプレートで、指定された文字の種類で動作を変えることができ、basic_stringにこれの派生クラスを渡すことで、独自の処理に切り替えることが出来る。char_traits - cpprefjp C++日本語リファレンス …

ios_base::fmtflags

C++

取得するほうのios_base::flagsの戻り値の型は、ios_base::fmtflagsであり、これは各処理系の実装にもよるが大抵はビットマスクの列挙型である。ios_base::fmtflags - cpprefjp C++日本語リファレンスどこにあるか調べてみた。/usr/includeの中/usr/include…

ios_base::flags

C++

ストリームの現在の書式フラグを取得するには、ios_base::flagsを使う。ios_base::flags - cpprefjp C++日本語リファレンスstd::coutの書式フラグを取得する。実行すると、 $ vi ios_base.cpp $ g++ ios_base.cpp -o ios_base $ ./ios_base std::cout.flags(…

getline

C++

実は、basic_stringの非メンバ関数に、もう一つのgetlineがある。getline - cpprefjp C++日本語リファレンスstringに対応しており、非メンバなので、"std::getline"として呼び出すだけである。stringなので、バッファ上限は不要。 $ ls getline getline.cpp …

basic_istream::getline

C++

basic_istream::getlineは、1行ごとに指定のバッファに読み込む。basic_istream::getline - cpprefjp C++日本語リファレンスよく見ると、char型などの文字配列のバッファには対応してるが、stringオブジェクトには対応してない模様。 となると、バッファを超…

basic_istream::tellg

C++

basic_istream::tellgは、ストリームの現在の読み取り位置を取得する。basic_istream::tellg - cpprefjp C++日本語リファレンス前回のプログラムで、basic_istream::getで読み込む前、読み込んだ後、の位置を確認してみる。 $ vi basic_istream.cpp $ g++ ba…

basic_istream::get(文字列の取得)

C++

basic_istream::getには、文字列を取得できるオーバーロードメンバ関数がある。basic_istream::get - cpprefjp C++日本語リファレンスこれで、 $ cat test.txt ABC DEF GHI$catでこのように見えるテキストファイルを行文字列ごとに取得できるか試してみる。…

basic_istream::readsome

C++

basic_istream::readsomeは、指定された文字数以下の文字列を入力ストリームから読み取る。basic_istream::readsome - cpprefjp C++日本語リファレンスreadは文字数ちょうどなので、文字数に達しなかった場合、EOFやfailとなったが、こちらはそうならない。…

istringstream

C++

入力用のistringstreamにおいて、入力演算子を使って、スペース区切りの文字列を、各トークン毎に変数に振り分けることができる。basic_istringstream - cpprefjp C++日本語リファレンスistringstreamのissのコンストラクタに"ABC 123 0.456"を指定。 文字列…

ostringstream

C++

文字列ストリームについては、strstreamが非推奨のため、現在ではstringstreamを使うのが一般的。 今回は、出力用のostringstreamで、簡単な出力の仕方を扱う。std::basic_ostringstream - cppreference.comostringstreamのossは、コンストラクタでバッファ…

strstream::str

C++

strstreamで紐付けられたバッファにアクセスするには、メンバ関数str()を使う。std::strstream::str - cppreference.com今回は、紐付けたbufに続いて、str()で取得した文字列も出力する。これで実行すると、 $ vi strstream.cpp $ g++ strstream.cpp -o strs…

ends

C++

strstreamでNULL終端していない場合は、endsを出力することでNULL終端する。ends - cpprefjp C++日本語リファレンス前回のプログラムに、endsの処理を追加する。このようにする。 $ vi ends.cpp $ g++ ends.cpp -o ends In file included from /usr/include/…

strstream

C++

文字列をストリームのように扱えるクラスがstrstreamstd::strstream - cppreference.com入出力演算子で、文字列を追加したりできる。(ただし、随分前から非推奨になっているので、 basic_istringstream - cpprefjp C++日本語リファレンス 現在では、こちらを…

endl

C++

C++において、改行などの入出力制御操作は、endlを始めとするマニピュレータが行う。endl - cpprefjp C++日本語リファレンスendlは改行を表すマニピュレータだが、その正体は関数テンプレートである。 引数にストリームを指定すると、そのストリームで改行が…

basic_ios::fail

C++

basic_ios::failは、エラー(failまたはbad)かどうかを判定する。basic_ios::fail - cpprefjp C++日本語リファレンスEOFとエラーは独立してるので、EOFであっても、エラーでないということはある。eof()とは別にfail()でも調べる。 $ vi basic_ios.cpp $ g++ …

basic_ios::eof

C++

basic_ios::eofは、EOFかどうかを表す。basic_ios::eof - cpprefjp C++日本語リファレンスgoodでない場合といっても、EOFの場合、エラーの場合、などいくつかある。goodでない場合に、eofで判定する。 $ vi basic_ios.cpp $ g++ basic_ios.cpp -o basic_ios …

basic_ios::good

C++

basic_ios::goodは、ストリームが正常かどうかを表す。basic_ios::good - cpprefjp C++日本語リファレンス今度は、good()で判定してみる。今回も、cinでreadして、goodかどうかを判定する。 goodなら、"good"と出力。そうでない場合は"!"を出力。 $ vi basic…

ios

C++

iosは、basic_ios<char>のエイリアス。basic_iosは、basic_istreamの基底クラスの1つ。 ロケールや文字に依存した書式の状態、ストリームバッファの状態と操作を行うメンバが定義されている。basic_ios - cpprefjp C++日本語リファレンスエラーやEOFでストリームの</char>…

basic_istream::read

C++

basic_istream::readは、指定された文字数ちょうどの文字列を入力ストリームから読み取る。basic_ios - cpprefjp C++日本語リファレンス入力文字列が指定された文字数に達しない場合、文字列決定のリターンキーを入れても、読み込み待ち状態のままになり、文…

basic_istream::get

C++

cinの正体であるbasic_istream<char>。 メンバ関数getで入力文字を取得できる。basic_istream::get - cpprefjp C++日本語リファレンス実は、文字列も取得できるが、今回は1文字のみ。int(正確にはint_type)で返ってくるので、 $ vi basic_istream.cpp $ g++ basic_</char>…

cin

C++

cinは、入力演算子で標準入力から入力を表す標準入力ストリームオブジェクトである。cin - cpprefjp C++日本語リファレンス std::cin, std::wcin - cppreference.comstd::coutと同様に、グローバルオブジェクトなので、構造体のコンストラクタ、デストラクタ…

basic_ostream::flush

C++

flushは、バッファをフラッシュする。basic_ostream::flush - cpprefjp C++日本語リファレンスC言語のfflushのトピックのC++版である。 C言語では、'\n'など改行があるとフラッシュされるので、'\n'を出力せずにsleepさせた。 C++でも、std::endlなど改行が…