C++

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など改行が…

basic_ostream::write

C++

writeは文字列(またはバイト列)を出力する。basic_ostream::write - cpprefjp C++日本語リファレンスstringオブジェクトのstrに"ABCDE"をセットし、writeの第1引数にはstr.c_str()でC言語形式で文字列を、第2引数にはstr.size()でサイズを渡す。 $ vi basic_…

basic_string::c_str

C++

C++のstring(basic_string)も時には、C言語の関数に渡したり、文字配列として扱う場合が度々あるだろう。 しかし、相手はC言語の仕様で作られている要素のため、そのまま渡すことはできない。basic_string::c_str - cpprefjp C++日本語リファレンスc_strは、…

basic_string::size

C++

stringの正体は、basic_string - cpprefjp C++日本語リファレンスbasic_string&ltchar>であり、さまざまなメンバが定義されている。 sizeは、basic_string::size - cpprefjp C++日本語リファレンス文字列の長さを取得するメンバ関数。str1は後から"ABC"を代…

basic_ostream::put

C++

coutは、標準出力に出力するためのグローバルなostreamオブジェクトである。cout - cpprefjp C++日本語リファレンスで、このostreamはさらに、basic_ostream - cpprefjp C++日本語リファレンスusingで定義されていて、その正体はbasic_ostreamである。 basic…

cout

C++

coutは、出力演算子で標準出力に出力するために指定する標準出力ストリームオブジェクトである。cout - cpprefjp C++日本語リファレンス std::cout, std::wcout - cppreference.comstd::coutは、グローバルオブジェクトなので、グローバルなクラスや構造体の…

ラムダ式

C++

ラムダ式は、軽量な関数オブジェクトを簡易的に定義する方法。 ラムダ式 - cpprefjp C++日本語リファレンス基本的にはxとyの値を足したものを返している関数オブジェクトをaddに格納しているだけ。 キャプチャリストに&があるので、retを中からも外からも使…

constexpr

C++

constexprは、定数式であることを示すキーワード。constexpr - cpprefjp C++日本語リファレンスconstexprは、コンパイル時に評価されるので、factorial(10)の値cはコンパイル時には決定されている。一方で、factorial(10)の値rは実行時に評価される。10の階…

static_assert

C++

C言語のassertは実行時に式を評価するものであった。 C++11のstatic_assertはコンパイル時に式を評価する機能。コンパイル時アサート - cpprefjp C++日本語リファレンスstatic_assert.cppが、 // main関数 int main(){ // 変数の宣言 const int N = 4; // co…

weak_ptr

C++

weak_ptrは、C++11で導入されたスマートポインタの一種で、参照はできるが、リソースの所有権を持つことはできない。weak_ptr - cpprefjp C++日本語リファレンスclass_testの中で、子オブジェクトポインタptr_がshare_ptrの場合に、まず、main.cppで、 // ヘ…

shared_ptr

C++

shared_ptrは、C++11で導入されたスマートポインタの一種で、リソースの所有権は複数のポインタで共有できる。 いくつのポインタから参照されているかを参照カウンタというもので数えていて、どれからも参照されていないとき、リソースが解放される。shared_…

unique_ptr

C++

unique_ptrは、C++11で導入されたスマートポインタの一種で、とあるunique_ptrが指すリソースの所有権は1つのポインタしか持つことができない(現在はそのunique_ptrのみが持つ)という特徴がある。unique_ptr - cpprefjp C++日本語リファレンスtest.hで、test…