-
C++のstd::is_arithmeticテンプレートの使い方を徹底解説
この記事では、C++ STLに用意されているstd::is_arithmeticテンプレートの仕組み、構文、具体的な使用例について詳しく解説します。is_arithmeticテンプレートは、指定された型Tが算術型(arithmetic type)であるかどうかを判定するために使用される型特性(type traits)の一つです。算術型とは?算術型は、大きく以下の2つのカテゴリに分類されます。整数型(integral types) − 整数値を表す型です。主な整数型は以下の通りです。charboolintlongshortlong longwchar_tchar16_tchar32_t浮動小数点
-
C++ STLのmultiset::begin()とend()関数の使い方を徹底解説
本記事では、C++ STLにおけるmultiset::begin()関数とmultiset::end()関数の動作、構文、そして具体的な使用例について詳しく解説します。C++ STLにおけるmultisetとは?multiset(マルチセット)は、set(セット)コンテナとよく似たコンテナです。setと同様に、値をキーの形式で格納し、特定の順序に従って管理されます。multisetでも、値はsetと同じくキーとして識別されます。両者の最大の違いは、setのキーが一意である(同じキーが2つ存在しない)のに対し、multisetでは同一のキー値を複数持つことができるという点です。なお、multis
-
C++ STLのmultiset::clear()関数とは?使い方と実行例を解説
本記事では、C++ STLにおける multiset::clear() 関数の動作、構文、そして具体的な使用例について詳しく解説します。 C++ STLにおけるmultisetとは? multiset(マルチセット)は、setコンテナとよく似たコンテナです。setと同様に、値をキーとして特定の順序で格納します。 multisetにおいても、値はキーとして識別されます。multisetとsetの主な違いは、setが重複のない一意なキーのみを持つのに対し、multisetでは同じ値のキーを複数持つことができるという点です。 multisetのキーは、二分探索木(binary search tre
-
C++ STLのmultiset::count()関数とは?使い方とコード例を解説
この記事では、C++ STLにおけるmultiset::count()関数の動作、構文、そして具体的な使用例について詳しく解説します。 C++ STLにおけるmultiset(マルチセット)とは? multisetは、setコンテナとよく似た連想コンテナの一つです。setと同様に、値をキーの形式で格納し、常にソートされた特定の順序で要素を保持するという特徴があります。 multisetでも、setと同じように各値はキーとして識別されます。両者の最大の違いは、setは重複しない一意なキー(同じキーが2つ以上存在できない)しか持てないのに対し、multisetは同じ値のキーを複数個格納できるとい
-
C++ STLのmultiset::empty()関数を徹底解説!使い方とサンプルコード
本記事では、C++ STLにおける multiset::empty() 関数の動作、構文、および具体的な使用例について詳しく解説します。 C++ STLにおけるmultisetとは? multisetは、setコンテナとよく似たコンテナです。setと同様に、値をキーの形式で特定の順序に従って格納します。 multisetでは、setと同じく値がキーとして識別されます。両者の主な違いは、setが重複しないキー(同じキーは2つ存在できない)を持つのに対し、multisetでは同じキー値を複数格納できるという点です。 なお、multisetのキーは二分探索木の実装にも利用されます。 multiset
-
C++のis_scalarテンプレート徹底解説!スカラー型の判定方法と実例
この記事では、C++ STLのstd::is_scalarテンプレートの仕組み、構文、具体的な使用例について詳しく解説します。 is_scalarは、<type_traits>ヘッダーファイルに定義されているテンプレートであり、指定された型Tがスカラー型であるかどうかを判定するために使用されます。 このテンプレートは、is_arithmetic、is_pointer、is_enum、is_member_pointer、is_sameといった型特性を組み合わせたものであり、これらのうちいずれか一つでもtrueであれば、is_scalarの結果もtrueになります。 C++におけるス
-
C++のstd::is_trivial関数とは?使い方とサンプルコードを解説
本記事では、C++のSTLに含まれるstd::is_trivialテンプレートについて、その仕組み・構文・実際のコード例をわかりやすく解説します。is_trivialは、<type_traits>ヘッダーファイルで定義されているテンプレートの一つで、指定した型Tが「トリビアル(自明)なクラス」であるかどうかを判定するために使用されます。C++におけるトリビアル型(trivial type)とは?トリビアル型とは、データが連続したメモリ領域に格納され、静的なデフォルト初期化のみを受け入れる型のことを指します。トリビアル型には、任意の型の配列、クラス、スカラー型などが含まれます。トリビ
-
C++のis_polymorphicテンプレートの使い方を徹底解説
本記事では、C++標準ライブラリ(STL)に含まれる std::is_polymorphic テンプレートの仕組み、構文、そして具体的な使用例について詳しく解説します。is_polymorphic は、C++の <type_traits> ヘッダーファイルで定義されているテンプレートです。指定したクラスが「多態クラス(ポリモーフィッククラス)」であるかどうかをコンパイル時に判定し、その結果を true または false として返します。多態クラスとは?多態クラスとは、仮想関数(virtual関数)を持つクラスのことです。具体的には、以下のいずれかに該当するクラスが該当します。自身
-
C++のis_referenceテンプレートとは?構文と使い方を実例付きで解説
本記事では、C++ STL に含まれる std::is_reference テンプレートの動作、構文、そして具体的な使用例について詳しく解説します。 is_reference は <type_traits> ヘッダーで定義されているテンプレートで、指定した型 T が参照型であるかどうかを判定するために使用されます。 このテンプレートは is_lvalue_reference と is_rvalue_reference を組み合わせたものと考えることができ、どちらか一方が true であれば is_reference の結果も true になります。 C++における「参照」とは?
-
C++の列挙型(enum)とは?基本の使い方をサンプルコードで解説
この記事では、C++における列挙型(Enumerated type / Enum)について、基本的な概念と実際の使い方をサンプルコード付きで解説します。 列挙型(enum)とは 列挙型とは、プログラマが独自に定義できるユーザー定義データ型の一つです。あらかじめ決められた有限個の値(列挙子)だけを変数に代入できるようにすることで、コードの可読性と安全性を高めることができます。 例えば「性別」のように、取りうる値が「男性」「女性」と限定される場合などに列挙型は非常に有効です。 列挙型の使用例 以下は、性別を表す列挙型を定義し、switch文で値に応じた処理を行うサンプルプログラムです。 #incl
-
【C++】set_terminate()でキャッチされなかった例外の終了動作をカスタマイズする方法
このチュートリアルでは、C++における「キャッチされなかった例外(未処理例外)」の終了動作をカスタマイズする方法について解説します。通常、例外はtry-catchブロックによって処理されます。しかし、スローされた例外の型に対応するcatchブロックが存在しない場合、プログラムはstd::terminate()関数を呼び出して強制終了します。このterminate()のデフォルト動作は、set_terminate()関数を使うことで、ユーザーの要件に応じて自由に変更することが可能です。サンプルコード#include <exception>#include <iostream&g
-
C++のデフォルト引数とは?基本の使い方をサンプルコードで解説
本記事では、C++における「デフォルト引数(デフォルト実引数)」の基本的な概念と使い方を、サンプルコードとともにわかりやすく解説します。デフォルト引数とはデフォルト引数とは、関数の宣言時にあらかじめ初期値を設定しておく引数のことです。関数を呼び出す際に、その引数に対応する値が渡されなかった場合、自動的に設定済みのデフォルト値が使用されます。これにより、同じ関数を「引数の数が異なる複数のパターン」で柔軟に呼び出せるようになり、オーバーロードを定義する手間を省くことができます。サンプルコード以下は、デフォルト引数を持つ関数 sum() を定義した例です。引数 z と w にはデフォルト値として 0
-
C/C++で文字列を反転させるさまざまな方法を徹底解説
このチュートリアルでは、C/C++で文字列を反転(逆順に並べ替え)するためのさまざまな方法について、具体的なプログラム例を交えながら詳しく解説します。文字列の反転は、プログラミングの基礎的な操作の一つであり、アルゴリズムの学習や実務の両方で頻繁に登場します。ここでは、代表的な3つのアプローチを紹介します。実装例1. ユーザー定義のreverse_str()関数を使う方法まず、自分で反転処理を実装する方法です。文字列の先頭と末尾から順に文字を入れ替えていく、最も基本的なアルゴリズムです。#include <bits/stdc++.h> using namespace std; //
-
C++のdelete演算子とfree()関数の違いと正しい使い方
このチュートリアルでは、C++におけるdelete演算子とfree()関数について詳しく解説します。 どちらの機能も主な目的は共通しています。それは、不要になったメモリを解放することです。ただし、両者には明確な役割の違いがあります。 delete演算子 ... new演算子で動的に確保したメモリを解放する free()関数 ... malloc()関数で動的に確保したメモリを解放する この対応関係を誤ると、プログラムがクラッシュするなどの未定義動作を引き起こす恐れがあるため、注意が必要です。 サンプルコード #include<stdio.h> #include<stdli
-
【C++】ユーザー定義コンストラクタを作ると、コンパイラはデフォルトコンストラクタを自動生成しない
本記事では、「プログラマ自身がコンストラクタを定義した場合でも、C++コンパイラはデフォルトコンストラクタを自動的に生成するのか?」というよくある疑問について、サンプルコードとともに分かりやすく解説します。C++の基本的なルールとして、クラスにコンストラクタがひとつも定義されていない場合に限り、コンパイラは引数なしで呼び出せる「デフォルトコンストラクタ」を暗黙的に生成します。一方、ユーザーが何らかのコンストラクタ(例:引数付きのコンストラクタ)を定義した瞬間、コンパイラによるデフォルトコンストラクタの自動生成は行われなくなります。例1:コンストラクタを一切定義しない場合#include<
-
C++グラフィックスで線を描画する方法
はじめに 本記事では、C++のグラフィックス機能を使って線を描画するプログラムについて解説します。 C++で図形の描画やサイズ変更、アニメーションなど、さまざまなグラフィック処理を実現するには、graphics.h ライブラリを使用します。このライブラリは、Turbo C++などの開発環境で古くから利用されているBGI(Borland Graphics Interface)を基盤としており、直線や円、矩形などの基本図形を描画するための関数が多数用意されています。 なお、graphics.h は標準ライブラリではないため、動作させるには Turbo C++ や DOSBox 上の互換環境など、
-
C++クラスによるファイル処理の基本と実装方法
このチュートリアルでは、C++のクラスを使ったファイル処理の方法について解説します。 C++におけるファイル処理の仕組み C++では、<fstream>ヘッダーに含まれるifstream(入力用)やofstream(出力用)といったストリームクラスを利用してファイル操作を行います。これらの標準機能に加えて、ユーザー自身がクラスを定義し、ファイルとのやり取りを行う独自の関数を作成することも可能です。 以下は、ofstreamによるファイルへの書き込みと、ifstreamによる読み込みを実装したサンプルコードです。 サンプルコード #include <iostream&
-
C++ STLのlower_boundとupper_boundでソート済み配列のfloor・ceilを効率的に求める方法
この記事では、C++ の標準テンプレートライブラリ(STL)を活用して、ソート済み配列内の指定した値に対する「floor(床)」と「ceil(天井)」を求めるプログラムを解説します。 floorとceilとは? まず用語を整理しましょう。 floor(床):配列内に存在する、対象の値以下の最大の要素 ceil(天井):配列内に存在する、対象の値以上の最小の要素 例えば、配列 {1, 2, 4, 7, 11} において値「5」の floor は「4」、ceil は「7」となります。 STLのlower_bound()とupper_bound()を使う ソート済み配列に対しては、STLが提供す
-
C/C++の拡張整数型(intN_t)とは?正しい整数サイズの選び方を解説
このチュートリアルでは、C/C++における拡張整数型(Extended Integral Types)について、実際のサンプルプログラムを交えながら分かりやすく解説します。 C言語のデータ型が抱える「サイズの曖昧さ」 C言語およびC++の組み込み整数型(int や long など)は、その定義が非常に緩やかです。例えば int のサイズは規格上「最低でも16ビット」としか保証されておらず、実際のビット幅はコンパイラやターゲット環境が32ビットか64ビットかによって変化します。 このような環境依存の挙動は、移植性の高いプログラムを書く際に大きな障害になります。そこで役立つのが、必要なビット幅を明
-
C/C++プログラムにおける多次元配列の初期化方法
このチュートリアルでは、C言語およびC++において多次元配列を初期化する方法について詳しく解説します。 多次元配列の宣言時のルール 多次元配列を宣言する際には、以下のような重要なルールがあります。 最も左側の次元(最初の次元)のサイズは省略することが可能 それ以外のすべての次元のサイズは必ず指定する必要がある これは、コンパイラが配列の要素を正しく配置するために、各次元の境界情報を必要とするためです。左端の次元だけは、初期化リストから自動的に推測できるため省略が許されています。 サンプルコード 以下の例では、2×2の二次元配列を初期化子リストを使って宣言しています。 #include<