41、C++Primer 4 thノート、IOライブラリ、フォーマットIO操作
4670 ワード
1、条件状態に加えて、iostreamオブジェクトごとにIOフォーマットの詳細を制御する状態を維持する.例えば、整形値の基数、浮動小数点値の精度、出力要素の幅など.標準ライブラリでは、オブジェクトのフォーマットステータスを変更するマニピュレータのセットも定義されています.マニピュレータ(manipulator)は、入力演算子または出力演算子として使用できるオペランドであり、関数またはオブジェクト(a manipulator is a function or objectthat can be used as an operand([計]オペランド;演算オブジェクト)to an input or output operator(演算子).)である.マニピュレータは、適用されたストリームオブジェクトを返します.したがって、1つの文に複数のマニピュレータとデータを出力できます.
2、マニピュレータの羅列
表1 iostreamで定義したマニピュレータ
boolalpha
真と偽を文字列として表示
x
noboolalpha
真と偽を1,0として表示
showbase
指摘数の基数を生成する接頭辞
x
noshowbase
記数ベース接頭辞を生成しない
showpoint
常に小数点を表示
x
noshowpoint
小数点を表示するには小数点がある
showpos
負数以外の+を表示
x
noshowpos
負以外の数の+は表示されません
uppercase
16進数で0 Xを印刷し、科学記数法でEを印刷する
x
nouppercase
16進法で0 xを印刷し、科学記数法でeを印刷する
x
dec
10進数で表示(整形値、符号点数は影響を受けません)
hex
16進数で表示(整形値、符号点数は影響を受けません)
oct
8進法で表示(同上)
left
値の右に入力文字を追加
right
値の左に入力文字を追加
internal
記号と値の間に入力文字を追加
fixed
小数点数表示
scientific
科学的記数法で浮動小数点数を表示する
boolalpha
真と偽を文字列として表示
flush
OStreamバッファのリフレッシュ
ends
空の文字を挿入し、ostreamバッファをリフレッシュします.
endl
改行を挿入し、ostreamバッファをリフレッシュします.
unitbuf
各出力操作の後にバッファをリフレッシュ
x
nounitbuf
通常のバッファ・リフレッシュの復元
x
skipws
入力オペレータの空白をスキップ
noskipws
入力オペレータの空白をスキップしない
ws
空白を「食べる」
注意:x付きはデフォルトのストリームステータスです.
表2 iomanipで定義したマニピュレータ
setfill(ch)
chで空白を埋める
setprecision(n)
浮動小数点精度をnに設定
setw(w)
読み書きw文字の値
setbase(b)
基数bで整数を出力
3、マニピュレータを読み書きするときは、データを読み書きせず、逆に何らかの行動をとる.ストリームフォーマットの状態を変更するマニピュレータは、通常、後続のIOに対して変更後のフォーマット状態を保持する.マニピュレータの状態変更をキャンセルするのは通常が一番です.一般に、ストリームは、各IOオペレーションの後に通常のデフォルト状態にあるべきである.フォーマットの状態を変更したマニピュレータの多くは、設定/復元ペアを提供し、1つのマニピュレータはフォーマットの状態を新しい値に設定し、もう1つは復元し、通常のデフォルトのフォーマットを復元します.
4、flags操作でフォーマット状態を回復する
flagsオペレーションは、ストリームの条件状態を管理するrdstateオペレーションとsetstateオペレーションと同様です.この場合、標準ライブラリはflags関数のペアを定義します.
•実パラメータを持たないflags()は、ストリームの現在のフォーマット状態を返します.戻り値は、fmtflagsという標準ライブラリ定義タイプです.
•flags(arg)は、実パラメータを受け入れ、ストリームフォーマットを実パラメータで指定したフォーマットに設定します.
サンプルコード
5、制御出力フォーマット
出力制御には、数値の表示を制御するとともに、パディングのデータとレイアウトを制御する2つのクラスがあります.
サンプルコード
6、浮動小数点値のフォーマットを制御する
1)浮動小数点値のフォーマットでは、次の3つの側面を制御できます.
•精度:数桁(総桁数)を表示します.
•記数法:小数表記か科学表記かで表示されます.
•整数の浮動小数点値である小数点の処理.
サンプルコード
2)浮動小数点値を回復するためのデフォルトの記数法
他のオペレータとは異なり、unsetfメンバーを呼び出してscientificまたはfixedの変更をキャンセルする必要があります.
サンプルコード
7、パディング出力
•setwは、次の数値または文字列の最小間隔を指定します.
•left、左揃え出力.
•right、右揃え出力.出力の既定値は右揃えです.
•internal、負の値のシンボル位置を制御します.internalは記号を左に揃え、値を右に揃え、その間の空間をスペースで埋めます.
•setfillでは、出力を入力するときに使用する別の文字を指定できます.デフォルトでは、値はスペースです.
endlのようにsetwは出力ストリームの内部状態を変更せず,次の出力の長さのみを決定する.
サンプルコード
8、デフォルトでは、入力オペレータは空白(スペース、タブ、改行、給紙、およびリターン)を無視します.noskipwsは、空白をスキップしないように強制します.
2、マニピュレータの羅列
表1 iostreamで定義したマニピュレータ
boolalpha
真と偽を文字列として表示
x
noboolalpha
真と偽を1,0として表示
showbase
指摘数の基数を生成する接頭辞
x
noshowbase
記数ベース接頭辞を生成しない
showpoint
常に小数点を表示
x
noshowpoint
小数点を表示するには小数点がある
showpos
負数以外の+を表示
x
noshowpos
負以外の数の+は表示されません
uppercase
16進数で0 Xを印刷し、科学記数法でEを印刷する
x
nouppercase
16進法で0 xを印刷し、科学記数法でeを印刷する
x
dec
10進数で表示(整形値、符号点数は影響を受けません)
hex
16進数で表示(整形値、符号点数は影響を受けません)
oct
8進法で表示(同上)
left
値の右に入力文字を追加
right
値の左に入力文字を追加
internal
記号と値の間に入力文字を追加
fixed
小数点数表示
scientific
科学的記数法で浮動小数点数を表示する
boolalpha
真と偽を文字列として表示
flush
OStreamバッファのリフレッシュ
ends
空の文字を挿入し、ostreamバッファをリフレッシュします.
endl
改行を挿入し、ostreamバッファをリフレッシュします.
unitbuf
各出力操作の後にバッファをリフレッシュ
x
nounitbuf
通常のバッファ・リフレッシュの復元
x
skipws
入力オペレータの空白をスキップ
noskipws
入力オペレータの空白をスキップしない
ws
空白を「食べる」
注意:x付きはデフォルトのストリームステータスです.
表2 iomanipで定義したマニピュレータ
setfill(ch)
chで空白を埋める
setprecision(n)
浮動小数点精度をnに設定
setw(w)
読み書きw文字の値
setbase(b)
基数bで整数を出力
3、マニピュレータを読み書きするときは、データを読み書きせず、逆に何らかの行動をとる.ストリームフォーマットの状態を変更するマニピュレータは、通常、後続のIOに対して変更後のフォーマット状態を保持する.マニピュレータの状態変更をキャンセルするのは通常が一番です.一般に、ストリームは、各IOオペレーションの後に通常のデフォルト状態にあるべきである.フォーマットの状態を変更したマニピュレータの多くは、設定/復元ペアを提供し、1つのマニピュレータはフォーマットの状態を新しい値に設定し、もう1つは復元し、通常のデフォルトのフォーマットを復元します.
4、flags操作でフォーマット状態を回復する
flagsオペレーションは、ストリームの条件状態を管理するrdstateオペレーションとsetstateオペレーションと同様です.この場合、標準ライブラリはflags関数のペアを定義します.
•実パラメータを持たないflags()は、ストリームの現在のフォーマット状態を返します.戻り値は、fmtflagsという標準ライブラリ定義タイプです.
•flags(arg)は、実パラメータを受け入れ、ストリームフォーマットを実パラメータで指定したフォーマットに設定します.
サンプルコード
void display(ostream& os)
{
//remember the current format state
ostream::fmtflags curr_fmt = os.flags();
//do output that uses manipulators that change the format state of os
os.flags(curr_fmt); //restore the original format state of os
}
5、制御出力フォーマット
出力制御には、数値の表示を制御するとともに、パディングのデータとレイアウトを制御する2つのクラスがあります.
サンプルコード
int main()
{
bool bool_val;
cout << boolalpha
<< bool_val
<< noboolalpha;
return 1;
}
6、浮動小数点値のフォーマットを制御する
1)浮動小数点値のフォーマットでは、次の3つの側面を制御できます.
•精度:数桁(総桁数)を表示します.
•記数法:小数表記か科学表記かで表示されます.
•整数の浮動小数点値である小数点の処理.
サンプルコード
int main()
{
cout << "Precision: " << cout.precision()
<< ", value: " << sqrt(2.0) << endl;
int prev_precision = cout.precision(12);
cout << ", value: " << sqrt(2.0) << endl;
cout << setprecision(prev_precision);
cout << ", value: " << sqrt(2.0) << endl;
return 1;
}
2)浮動小数点値を回復するためのデフォルトの記数法
他のオペレータとは異なり、unsetfメンバーを呼び出してscientificまたはfixedの変更をキャンセルする必要があります.
サンプルコード
#include <iostream>
#include "string"
#include "cmath"
using namespace std;
int main()
{
cout << sqrt(2.0) << '
' << endl;
cout << scientific << sqrt(2.0) << endl;
cout << fixed << sqrt(2.0) << endl;
//reset to default handling for notation
cout.unsetf(ostream::floatfield);
cout << sqrt(2.0) << endl;
return 1;
}
7、パディング出力
•setwは、次の数値または文字列の最小間隔を指定します.
•left、左揃え出力.
•right、右揃え出力.出力の既定値は右揃えです.
•internal、負の値のシンボル位置を制御します.internalは記号を左に揃え、値を右に揃え、その間の空間をスペースで埋めます.
•setfillでは、出力を入力するときに使用する別の文字を指定できます.デフォルトでは、値はスペースです.
endlのようにsetwは出力ストリームの内部状態を変更せず,次の出力の長さのみを決定する.
サンプルコード
#include <iostream>
#include "string"
#include "cmath"
#include "iomanip"
using namespace std;
int main()
{
int i = -16;
double d = 3.14159;
cout << setfill('#')
<< "i: " << setw(12) << i << endl
<< "d: " << setw(12) << d << endl
<< setfill(' '); //restore normal pad character
return 1;
}
8、デフォルトでは、入力オペレータは空白(スペース、タブ、改行、給紙、およびリターン)を無視します.noskipwsは、空白をスキップしないように強制します.