C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++のアロー演算子(->)とは?ドット演算子との違いを実例で解説

    C++では、クラスや構造体のメンバーにアクセスする際に、ドット演算子(.)とアロー演算子(->)の2種類を使います。どちらも同じ目的で使用されますが、適用される場面が異なります。C++において、class、struct、unionとして宣言された型はすべて「クラスタイプ」に分類されるため、以下の説明はこれら3つすべてに当てはまります。 )の使い分け a.b の場合 a.b は、b がオブジェクトa(またはオブジェクトへの参照)のメンバーである場合にのみ使用できます。つまり、a.b における a は、常にクラスの実体(オブジェクト本体)か、オブジェクトへの参照でなければなりません。

  2. C++のnewキーワードとoperator newの違いをわかりやすく解説

    C++でオブジェクトを生成する際には、メモリ上にブロックを確保し、さらにコンストラクタを呼び出してそのメモリブロックを初期化するという2段階の処理が必要になります。通常、私たちが new キーワードを使ってオブジェクトを作成すると、この2つの処理が連続して実行されます。一方、operator new はメモリ領域の確保だけを行う関数です。本記事では、この2者の違いを具体例とともに詳しく解説します。newキーワードとはnew 演算子は、ヒープ領域へのメモリ割り当てを要求するための特殊な演算子です。十分なメモリが利用可能な場合にのみ、確保されたメモリへのポインタ変数が返されます。通常の new キ

  3. C++の型キャスト演算子とは?4種類の特徴と使い方を徹底解説

    型キャスト(キャスト)とはキャストとは、あるデータ型を別のデータ型へ強制的に変換するための特殊な演算子です。演算子としてのキャストは単項演算子であり、他の単項演算子と同じ優先順位を持ちます。ほとんどのC++コンパイラでサポートされている、最も一般的なキャストの書式は次のとおりです。(type) expressionここで type は変換後のデータ型を表します。C++にはこれ以外にも、目的に応じて使い分けられる4つのキャスト演算子が用意されています。C++の4つのキャスト演算子1. const_cast<type>(expr)const_castは、キャスト時に const や v

  4. C++のコピーコンストラクタと代入演算子の違いを徹底解説

    C++におけるコピーコンストラクタと代入演算子(コピー代入演算子)は、どちらも「あるオブジェクトを別のオブジェクトで初期化・設定する」ために使用されます。しかし、両者には重要な違いがあります。最大の相違点はメモリの扱いです。コピーコンストラクタは新しいオブジェクトに対して独立したメモリ領域を確保します。一方、代入演算子は新しいメモリ領域を確保せず、既存のオブジェクトに値を上書きする形になります。つまり、すでに存在するメモリブロックに対して操作が行われる点が特徴です。コピーコンストラクタの構文classname (const classname &obj) { // コンストラクタの本体

  5. C++でオーバーロードできない演算子の一覧とその理由

    C++では、+、-、[]、-> など、多くの演算子をオーバーロード(多重定義)することができます。しかし、すべての演算子がオーバーロード可能というわけではなく、言語仕様上、オーバーロードが禁止されている演算子も存在します。 オーバーロードできない演算子 C++でオーバーロードできない主な演算子は以下の通りです。 .(ドット演算子):メンバアクセス演算子。オブジェクトのメンバに直接アクセスするために使われます。 ? :(三項条件演算子):条件分岐を1行で記述するための演算子です。 ::(スコープ解決演算子):名前空間やクラスのスコープを指定するために使われます。 .*(メンバポイン

  6. C++におけるストリーム挿入(<<)・抽出(>>)演算子のオーバーロード入門

    C++では、ストリーム挿入演算子 << とストリーム抽出演算子 >> を使うことで、int や double などの組み込みデータ型の入出力を簡単に行えます。実は、これらの演算子はユーザー定義型(クラスのオブジェクトなど)に対してもオーバーロードでき、独自クラスでも標準型と同じように cin や cout を使った入出力が可能になります。 なぜfriend関数として宣言するのか ここで重要なポイントがあります。演算子オーバーロード関数は、クラスのfriend(フレンド)関数として宣言する必要があるという点です。 その理由は、cout << D1; のように使

  7. 【C++】unordered_multimap::operator=() の使い方とサンプルコード解説

    std::unordered_multimap::operator=() は、C++標準ライブラリに用意された代入演算子です。既存の要素をすべて置き換える形で新しい内容を unordered_multimap に代入し、必要に応じてコンテナのサイズも自動的に調整します。 概要 この演算子は「コピー代入」と呼ばれる動作を行い、引数として渡された別の unordered_multimap オブジェクトの全要素を現在のオブジェクトへ複製します。元々格納されていた要素は破棄され、新しい要素に置き換えられる点に注意してください。 以下は、<unordered_map> ヘッダーで宣言されてい

  8. C/C++のカンマ演算子とは?仕組みと使い方を実例付きで解説

    カンマ演算子の基本カンマ(コンマ)演算子は、複数の式をひとつにつなげるための演算子です。カンマで区切られた式のリスト全体の値は、最も右側にある式の値になります。本質的に、カンマ演算子の役割は、一連の処理を左から右へ順番に実行させることにあります。その際、右端以外の式の値はすべて破棄されます。つまり、最も右側の式の評価結果が、カンマで区切られた式全体の値となるのです。例えば、次のように書くことができます。var = (count = 19, incr = 10, count+1);この式では、まず count に 19 を代入し、次に incr に 10 を代入します。その後 count に 1

  9. C++における演算子オーバーロードの規則まとめ

    C++の演算子オーバーロードとはC++はコンパイル時ポリモーフィズム(静的多態性)をサポートしています。その代表例が「関数のオーバーロード」と「演算子のオーバーロード」です。演算子のオーバーロードを使うと、ユーザー定義型に対して「+」や「==」などの演算子を自然な形で適用でき、コードの可読性を大きく向上させることができます。ただし、自由に定義できるわけではなく、言語仕様によっていくつかの重要なルールが定められています。演算子オーバーロードの主なルールオーバーロードできるのは既存の演算子のみ:C++に存在しない新しい演算子(例:** などの累乗演算子)を作成してオーバーロードすることはできません

  10. 【C++】条件文を使わずに偶数・奇数を判定して出力する2つの方法

    はじめにこの記事では、比較演算子(<、<=、!=、>、>=、==)などの条件文を一切使わずに、数値が偶数か奇数かを判定して出力するC++プログラムの書き方を解説します。通常、偶数・奇数の判定は条件文を使えば簡単です。数値を2で割った余りが0なら偶数、そうでなければ奇数と判断できます。あるいは、数値と1のビットごとのAND演算を行い、結果が0なら偶数、1なら奇数と判定することも可能です。しかし今回は条件文が使用できないため、少し工夫が必要になります。ここでは、考え方の異なる2つの方法を紹介します。方法1:文字列配列のインデックスを利用するまずは文字列の配列を活用する方法で

  11. C++でメモリ全体を埋め尽くすプログラムの作り方

    本記事では、シンプルなC++プログラムを書くことで、システムのメインメモリ(主記憶域)全体を埋め尽くす方法を解説します。仕組みは非常に単純で、動的メモリ確保を使って整数型の変数を繰り返し生成し続けることで、利用可能なメモリを次々と消費していきます。動的メモリ確保の基本C++では、new キーワードを使用することで、実行時に動的にメモリ領域を確保できます。new 演算子の基本的な構文は以下のとおりです。pointer_var = new data_typeまた、確保したメモリを解放するには delete キーワードを使用します。構文は次のようになります。delete pointer_var通常、

  12. C++で乱数を生成するプログラムの書き方【srand・rand関数の使い方を解説】

    C++を使って乱数を生成する方法を解説します。ここでは、0から指定した値までの範囲で乱数を生成します(このプログラムでは最大値を100に設定しています)。 srand()関数とは 乱数を生成するために使用するのがsrand()関数です。この関数はC標準ライブラリに含まれており、void srand(unsigned int seed)として宣言され、rand()関数が使用する乱数生成器にシード(種)を設定する役割を持ちます。 srand()の宣言は以下のとおりです。 void srand(unsigned int seed) この関数は「シード(seed)」と呼ばれる引数を1つ受け取ります。シ

  13. 摂氏を華氏に変換するC++プログラム

    この記事では、C++を使って摂氏(℃)の温度を華氏(℉)に変換するプログラムを紹介します。摂氏から華氏への変換は、次のシンプルな数式で行えます。 F = (9 × C ÷ 5) + 32 ここで、Cは摂氏温度、Fは華氏温度を表します。例えば、摂氏37度は華氏98.6度に相当し、これは人間の平熱に近い値です。 アルゴリズム 処理の流れは以下の通りです。 開始  摂氏温度Cを入力する  F = (9C/5) + 32 を計算する  結果Fを返す 終了 サンプルコード #include<iostream> using namespace std; int main() {

  14. C++で動的計画法を用いてフィボナッチ数を求めるプログラム

    フィボナッチ数列は、次のような数列です。0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,……この数列では、第n項は「第(n-1)項」と「第(n-2)項」の和として定義されます。数列を生成する方法としては再帰的なアプローチも考えられますが、素朴な再帰では同じ計算を何度も繰り返すため非効率です。一方、動的計画法を用いれば、計算済みのフィボナッチ数をすべてテーブル(配列)に保存し、その結果を再利用することで、次々と新しい項を効率よく求められます。入力 − 求めたい項の番号を入力として受け取ります。ここでは例として10を入力します。出力 − 第10項のフィボナッチ数は 55 と

  15. C++で基数ソート(ラディックスソート)を実装するプログラム

    基数ソート(ラディックスソート)は、非比較型のソートアルゴリズムの一つです。要素同士を直接比較するのではなく、整数キーを構成する各桁に注目し、同じ桁位置・同じ値を持つ数字どうしをグループ化しながら並べ替えを行います。 「基数」とは記数法における底のことです。私たちが普段使う10進法では基数は10であるため、10進数を基数ソートで並べ替える際には、数値を一時的に格納するための10個のバケット(ポケット)が必要になります。 基数ソートの計算量 時間計算量: O(nk) ※nは要素数、kは最大桁数 空間計算量: O(n+k) 入力 − ソート前のデータ: 802 630 20 745 52 3

  16. C++でバケットソートを実装する方法【アルゴリズムとサンプルコードを解説】

    バケットソートとはバケットソート(Bucket Sort)は、データ要素を複数の「バケット(桶)」に分配してから整列を行うソート手法です。各バケットには性質の似たデータが格納され、分配後は各バケット内を別のソートアルゴリズム(ここでは標準ライブラリの sort)で整列します。最後にすべてのバケットの要素を元の配列へ順番に集めることで、全体がソートされた状態になります。このアルゴリズムは、入力データが0.0以上1.0未満のような一様な分布に従う場合に特に高い性能を発揮します。バケットソートの計算量時間計算量: 最良ケース・平均ケースで O(n + k)、最悪ケースで O(n²)空間計算量: 最悪

  17. C++でバブルソートを実装する方法をわかりやすく解説

    バブルソート(Bubble Sort)は、比較ベースの基本的なソートアルゴリズムの一つです。隣り合う要素同士を比較し、順序が正しくない場合は入れ替えることを繰り返すことで、データ全体を昇順(または降順)に整列させます。このアルゴリズムは他のソート手法と比べて実装が非常にシンプルであるという特徴がありますが、一方でいくつかの欠点も抱えています。特に大量のデータを扱う場合には処理に時間がかかるため、大規模なデータセットのソートには適していません。学習用や小規模データ向けのアルゴリズムとして理解しておくと良いでしょう。バブルソートの計算量時間計算量: 最良ケース O(n)、平均・最悪ケース O(n2

  18. C++でヒープソートを実装する方法:最小ヒープの完全ガイド

    ヒープとはヒープ(Heap)とは、完全二分木のデータ構造であり、「最小ヒープ(Min Heap)」または「最大ヒープ(Max Heap)」のいずれかに分類されます。最大ヒープでは、ルートノードのキーがヒープ内のすべてのキーの中で最大値である必要があり、この性質は木の中のすべてのノードに対して再帰的に成り立たなければなりません。最小ヒープはその逆で、親ノードの値が常に子ノードの値以下になるという性質を持ちます。本記事では、最小ヒープを用いたヒープソートの実装方法を解説します。実装する関数の概要今回実装するクラスには、以下の主要なメンバ関数が含まれています。void BHeap::Insert(i

  19. C++でマージソートを実装する方法を解説

    マージソート(Merge Sort)は、分割統治法(divide and conquer)に基づいたソートアルゴリズムです。データセット全体をより小さな部分に分割し、それらをソートされた順序で統合(マージ)していくことで、最終的に整列済みのリストを作り上げます。最悪の場合でも計算量が低く抑えられるため、どのような入力データに対しても安定したパフォーマンスを発揮できるのが大きな特徴です。 マージソートの計算量 時間計算量: すべてのケースで O(n log n) 空間計算量: O(n) クイックソートなどは最悪ケースで O(n²) まで劣化しますが、マージソートはデータの初期状態に依存せず

  20. 【C++】選択ソートのアルゴリズムと実装コードをわかりやすく解説

    選択ソート(Selection Sort)は、シンプルで理解しやすいソートアルゴリズムの一つです。この手法では、リストを「ソート済みの部分」と「未ソートの部分」の2つの領域に分けて扱います。 まず、未ソートの領域から最大値(または最小値)を探し出します。ここでは最小値を基準に説明します。最小値が見つかったら、未ソート部分の先頭にあるデータと入れ替えることで、その値をリストの先頭へ移動します。この処理を1回行うごとにソート済みの領域が1つずつ拡大していき、最終的にリスト全体が昇順に並べ替えられます。 選択ソートの計算量 時間計算量:O(n2) 空間計算量:O(1) 選択ソートは追加のメモリを

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:28/300  20-コンピューター/Page Goto:1 22 23 24 25 26 27 28 29 30 31 32 33 34