C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のマニピュレータとは?endl・setw・setprecision・showpointの使い方を解説

マニピュレータ(Stream Manipulators)とは

ストリームマニピュレータは、ストリームオブジェクトに対する挿入演算子(<<)や抽出演算子(>>)と組み合わせて使用することを目的として設計された特殊な関数です。たとえば、次のように記述します。

std::cout << std::setw(10);

ただし、マニピュレータも本質的には通常の関数であるため、ほかの関数と同じように、ストリームオブジェクトを引数として明示的に呼び出すことも可能です。

boolalpha(std::cout);

マニピュレータは主に、ストリームの書式設定パラメータを変更したり、特定の特殊文字を挿入・抽出したりするために使われます。

以下では、C++で特によく使われる代表的なマニピュレータを順番に見ていきましょう。

endl ― 改行とバッファのフラッシュ

このマニピュレータは、改行文字「\n」と同じ働きを持ちますが、それに加えて出力ストリームをフラッシュする(バッファの内容を直ちに出力先へ書き出す)点が異なります。

サンプルコード

#include<iostream>
int main() {
    std::cout << "Hello" << std::endl << "World!";
}

実行結果

Hello
World!

showpoint / noshowpoint ― 小数点の表示制御

このマニピュレータは、浮動小数点数の表示において、小数点以下がなくても必ず小数点を含めて表示するかどうかを制御します。

サンプルコード

#include <iostream>
int main() {
    std::cout << "1.0 with showpoint: " << std::showpoint << 1.0 << '\n'
              << "1.0 with noshowpoint: " << std::noshowpoint << 1.0 << '\n';
}

実行結果

1.0 with showpoint: 1.00000
1.0 with noshowpoint: 1

setprecision ― 浮動小数点数の精度指定

このマニピュレータは、浮動小数点数の出力精度を変更します。「out << setprecision(n)」のように記述すると、対象ストリームの精度パラメータが n に設定されます。なお、setprecision を使用するにはヘッダー <iomanip> のインクルードが必要です。

サンプルコード

#include <iostream>
#include <iomanip>
int main() {
    const long double pi = 3.141592653589793239;
    std::cout << "default precision (6): " << pi << '\n'
              << "std::setprecision(10): " << std::setprecision(10) << pi << '\n';
}

実行結果

default precision (6): 3.14159
std::setprecision(10): 3.141592654

setw ― 出力フィールドの幅指定

このマニピュレータは、次の入出力フィールドの幅を変更します。「out << setw(n)」のように記述すると、対象ストリームの幅パラメータが n に設定されます。setw も <iomanip> ヘッダーが必要です。また、setw の効果は次の1回の出力にのみ適用され、その後は自動的に解除される点に注意してください。

サンプルコード

#include <iostream>
#include <iomanip>
int main() {
    std::cout << "no setw:" << 42 << '\n'
              << "setw(6):" << std::setw(6) << 42 << '\n'
              << "setw(6), several elements: " << 89 << std::setw(6) << 12 << 34 << '\n';
}

実行結果

no setw:42
setw(6):     42
setw(6), several elements: 89     1234

まとめ

C++のマニピュレータを使いこなせば、出力の書式を柔軟かつ簡潔に制御できます。endl は改行とフラッシュ、showpoint / noshowpoint は小数点の表示制御、setprecision は浮動小数点数の精度指定、setw はフィールド幅の指定といったように、それぞれの目的に応じて使い分けましょう。setprecision と setw を利用する際は、忘れずに <iomanip> をインクルードしてください。

  1. C++のブールリテラルとは?trueとfalseの基本と使い方を解説

    ブールリテラル(Boolean literals)とは、「真(true)」または「偽(false)」のいずれかの意味を持つリテラルのことです。C++におけるブールリテラルは true と false の2種類のみ存在し、これらは bool 型として扱われます。bool 型の変数には、この2つの値のどちらかを代入できます。条件分岐やループの判定など、プログラムのロジック制御において非常に重要な役割を果たします。ブールリテラルの使用例以下のコードでは、bool 型の変数に true を代入し、if文でその値を判定しています。#include<iostream> using namesp

  2. C++標準ライブラリとは?主要コンポーネントと特徴を徹底解説

    C++標準ライブラリの概要 C++プログラミング言語における標準ライブラリ(C++ Standard Library)とは、コア言語で記述され、C++ ISO標準規格の一部として定義されているクラスや関数のコレクションです。 標準ライブラリを活用することで、開発者は以下のような機能を追加実装の手間なく利用できます。 汎用コンテナと、それらを操作するための関数 関数オブジェクト 汎用的な文字列やストリーム(対話型I/OやファイルI/Oを含む) 一部の言語機能のサポート 数値の平方根を求めるなど、日常的なタスクのための関数 C++標準ライブラリの主な構成要素 1. ストリーム(Streams)