C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++のポインタ渡しと参照渡しの違いをサンプルコードで解説

    C++では、関数に引数を渡す方法として「ポインタ渡し」と「参照渡し」の2つがよく使われます。どちらも呼び出し元の変数そのものを操作できるため、値渡しとは異なり、関数内での変更が呼び出し元にも反映されます。ここでは、2つの変数の値を入れ替えるswap関数を例に、それぞれの書き方と動作を見ていきましょう。 ポインタ渡し(pass by pointer) ポインタ渡しでは、変数のアドレスを関数に渡します。関数側ではポインタを受け取り、間接演算子(*)を使ってアドレスが指す先の値にアクセスします。 #include <iostream> using namespace std; void

  2. C++のポインタと参照:基本構文から主な違いまで徹底解説

    ポインタとはポインタは、変数のメモリアドレスを格納するための仕組みです。変数そのものではなく、変数が配置されているメモリ上の位置を保持することで、間接的にデータへアクセスできるようになります。基本構文Type *pointer;初期化Type *pointer; pointer = &variable; // 変数のアドレスを代入参照とは参照(リファレンス)として宣言された変数は、すでに存在する変数の「別名」として動作します。参照は元の変数と同じメモリ領域を共有するため、参照を通じて行った操作は、そのまま元の変数への操作として反映されます。基本構文Type &newname

  3. C++におけるポインタ変数と参照変数の違いを徹底解説

    はじめにC++では、既存の変数に間接的にアクセスする方法として「ポインタ」と「参照」の2つが用意されています。どちらも似たような用途で使われますが、仕組みや使い方には重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。 参照(Reference)とは変数を参照として宣言すると、その参照は既存の変数の「別名」として機能します。参照を使うことで、元の変数と同じように値を読み書きできます。 構文Type &newname = existing_name; 初期化の例int x = 10; int &ref = x; // refはxの別名になる ポインタ(Pointe

  4. C++でバイナリヒープ(二分ヒープ)を実装する方法【サンプルコード付き】

    バイナリヒープ(二分ヒープ)とはバイナリヒープは完全二分木の一種で、「Minヒープ」または「Maxヒープ」のいずれかとして構成されるデータ構造です。Maxバイナリヒープでは、ルート(根)のキーがヒープ内のすべてのキーの中で最大である必要があり、この性質は木に含まれるすべてのノードに対して再帰的に成立しなければなりません。Minバイナリヒープも同様に、親ノードのキーが子ノードのキー以下であるという規則が全ノードに適用されます。本記事では、std::vectorを用いて最小ヒープ(Min Heap)をC++で実装する方法を解説します。メンバ関数の説明void BHeap::Insert(int e

  5. C++で最大ヒープ(Max Heap)を実装する方法とサンプルコード

    二分ヒープ(Binary Heap)とは、完全二分木の構造を持ち、最小ヒープ(Min Heap)または最大ヒープ(Max Heap)のいずれかの性質を満たすデータ構造です。最大二分ヒープでは、ルートに位置するキーが、ヒープ内に存在するすべてのキーの中で最大値でなければなりません。この性質は、二分木内のすべてのノードに対して再帰的に成り立つ必要があります。最小二分ヒープも同様に、親ノードが子ノード以下になるという対称的な性質を持ちます。アルゴリズムmax_heap 関数Begin Declare function max_heap () Declare j, t of the

  6. C++で最小ヒープ(Min Heap)を実装するプログラム:アルゴリズムとサンプルコードを解説

    二分ヒープ(Binary Heap)は完全二分木の一種で、「最小ヒープ(Min Heap)」または「最大ヒープ(Max Heap)」のいずれかとして構成されます。最大二分ヒープでは、根(ルート)のキーがヒープ内のすべてのキーの中で最大でなければならず、この性質は木のすべてのノードに対して再帰的に成立している必要があります。最小二分ヒープはその逆で、親ノードのキーが常に子ノードのキー以下であることが保証されるデータ構造です。 本記事では、C++を使って最小ヒープを構築するプログラムを、アルゴリズム・サンプルコード・実行結果とあわせてわかりやすく解説します。 アルゴリズム min_heap()

  7. 【C++入門】デフォルトコンストラクタの基礎と使い方をわかりやすく解説

    C++のコンストラクタとは コンストラクタ(constructor)とは、クラスの新しいオブジェクト(インスタンス)を生成した瞬間に自動的に実行される特殊なメンバ関数です。オブジェクトの初期化処理を記述するための仕組みで、C++プログラミングにおいて非常に重要な役割を担っています。 コンストラクタの基本ルール クラス名と完全に同じ名前を持つ 戻り値の型を持たない(voidすら指定できない) オブジェクト生成時に自動的に呼び出される 特に引数を取らないコンストラクタは「デフォルトコンストラクタ」と呼ばれる メンバ変数に初期値を設定したい場合など、コンストラクタはとても便利です。以下のサンプル

  8. C++の名前空間(namespace)とは?基本から使い方までわかりやすく解説

    名前空間(namespace)とは何か? 同じクラスに「ザラ」という同名の人物が2人いる状況を想像してみてください。両者を区別する必要があるときは、名前だけでは不十分で、住んでいる地域や母親・父親の名前といった追加情報を使うことになります。 C++のアプリケーション開発でも、まったく同じような状況が発生します。たとえば、あなたが書いたコードに xyz() という関数があり、同時に利用している別のライブラリにも同じ名前の xyz() 関数が存在しているとします。この場合、コンパイラはコード内で参照されている xyz() がどちらのバージョンなのかを判断できません。 このような名前の衝突問題を解決

  9. C++の名前空間はネストできる?構文とコード例で徹底解説

    はい、C++では名前空間(namespace)をネストすることができます。つまり、ある名前空間の中に別の名前空間を定義し、階層構造を持たせることが可能です。これにより、大規模なプロジェクトでもコードを論理的に整理し、名前の衝突を効果的に防ぐことができます。ネストされた名前空間の構文名前空間の中に別の名前空間を定義する基本的な書き方は以下の通りです。namespace namespace_name1 { // コード宣言 namespace namespace_name2 { // コード宣言 } }ネストされた名前空間へのアクセス方法ネストされた名前空間

  10. C++で配列を並べ替える方法|選択ソートの仕組みと実装例を解説

    C++では、さまざまなソート(並べ替え)アルゴリズムを使って配列を整列できます。ソート済みの配列とは、数値の大小順やアルファベット順など、何らかの基準に従って要素が並び替えられた配列のことです。代表的なソートアルゴリズムには、バブルソート、挿入ソート、選択ソート、マージソート、クイックソート、ヒープソートなどがあります。本記事では、その中でも構造がシンプルで理解しやすい「選択ソート」を取り上げ、実際のコード例とともに詳しく解説していきます。 選択ソートとは? 選択ソートは、未ソート部分の中から最小値を繰り返し探し出し、それを未ソート部分の先頭にある要素と交換することで、配列全体を昇順に整列さ

  11. C++のstd::list::sort()でリストをソートする方法

    C++標準ライブラリによるソートの概要この記事では、C++の標準ライブラリを活用して配列や連結リスト(リンクリスト)をソートする方法について解説します。C++にはさまざまな用途に対応する多数のライブラリが標準で用意されており、ソート機能もその一つです。std::list::sort()は、リストの要素を昇順に並べ替えるメンバ関数です。この関数は安定ソート(stable sort)であるため、値が等しい要素同士の相対的な順序は保持されます。要素の比較には、デフォルトでoperator<が使用されます。サンプルコード#include <iostream> #include <li

  12. C++の型推論とは?autoキーワードの基本と使い方をわかりやすく解説

    型推論(Type Inference)とは、プログラミング言語において式のデータ型を自動的に判別する機能のことです。この機能は、強い静的型付けを持つ一部の言語に備わっています。 C++では、C++11で追加されたautoキーワードを使うことで、自動的な型推論が可能になります。これにより、開発者は複雑な型名を明示的に書く必要がなくなり、コードがシンプルで読みやすくなります。 autoキーワードの活用例 たとえば、vectorの要素を走査するイテレータを作成したい場合、従来は std::vector<int>::iterator という長い型名を記述する必要がありました。しかし、aut

  13. C++のコピーアンドスワップイディオムとは?仕組みと実装のポイントを解説

    代入演算の仕組みと課題 C++における代入操作は、大きく分けて2つのステップで構成されています。1つ目はオブジェクトが持つ古い状態を破棄すること、2つ目は新しい状態を構築することです。前者にはデストラクタが、後者にはコピーコンストラクタがそれぞれ対応します。 これら単体の実装は比較的シンプルですが、代入演算子をオーバーロードする場面では話が変わります。自己代入への対応や例外安全性の確保などを考慮すると、実装は一気に難しくなります。そこで有効な解決策となるのが「コピーアンドスワップイディオム」です。 コピーアンドスワップイディオムの動作 このイディオムでは、以下の手順で処理を進めます。 コピー

  14. Linuxのゾンビプロセスと孤立プロセスとは?仕組みと対処法を解説

    Linuxシステムでは、通常の実行中プロセスのほかに、「ゾンビプロセス」や「孤立プロセス」といった特殊な状態を持つプロセスが存在します。これらを放置すると、プロセスID(PID)の枯渇などシステム全体に悪影響を及ぼす可能性があるため、正しい理解と適切な管理が重要です。本記事では、それぞれの特徴、発生メカニズム、そして対処方法についてわかりやすく解説します。 ゾンビプロセス(Zombie Process)とは ゾンビプロセスとは、すでに実行を終えているにもかかわらず、プロセステーブル上にエントリ(登録情報)が残っているプロセスのことです。主に子プロセスで発生しやすく、これは親プロセスが子プロ

  15. C++のラムダ式の基本と使い方を徹底解説

    C++のSTLには、std::for_eachのような便利な汎用関数が数多く含まれています。しかし残念ながら、これらの関数は使い勝手がやや煩雑な場合があります。特に、特定の関数にしか使わない一意のファンクタ(関数オブジェクト)を適用したい場合には、その場限りの処理のためだけに名前空間内で関数を定義する必要があり、コードが冗長になりがちです。このような問題を解決するのが「匿名関数(無名関数)」です。C++11ではラムダ式が導入され、その場で簡潔に匿名関数を作成できるようになりました。ラムダ式の基本的な例以下は、for_eachと組み合わせてラムダ式を使用するシンプルな例です。#include&l

  16. C++のfabs()関数の使い方を解説!絶対値を求める方法とサンプルコード

    C++で数値の絶対値を求めたいときに便利なのが、<cmath>ヘッダーに定義されているfabs()関数です。この記事では、fabs()関数の基本的な使い方から、実際のサンプルコード、実行結果までをわかりやすく解説します。fabs()関数とはfabs()は、C言語およびC++の標準ライブラリに含まれる関数で、引数に渡した浮動小数点数の絶対値(absolute value)を返します。負の値を渡せば正の値に変換され、正の値はそのまま返されます。関数の宣言fabs()関数は、以下のように宣言されています。double fabs(double x)パラメータと戻り値x:絶対値を求めたい浮動

  17. 二分木がBST(二分探索木)であるかどうかを判定するC++プログラム

    二分探索木(Binary Search Tree:BST)とは、次の3つの性質を満たす二分木データ構造のことです。あるノードの左部分木には、そのノードのキーよりも小さいキーを持つノードのみが含まれる。あるノードの右部分木には、そのノードのキーよりも大きいキーを持つノードのみが含まれる。左部分木と右部分木のそれぞれも、必ず二分探索木でなければならない。アルゴリズムBST判定は、各ノードに「取り得る値の範囲(最小値・最大値)」を渡しながら再帰的に木をたどることで実現できます。手順は以下の通りです。Begin function BSTUtill() ノードがNULLと等しい場

  18. C++におけるアーリーバインディングとレイトバインディングの違いを徹底解説

    本記事では、C++における「アーリーバインディング(早期結合・静的結合)」と「レイトバインディング(遅延結合・動的結合)」の違いについて、サンプルコードを交えながら分かりやすく解説します。 バインディング(結合)とは、識別子(変数名や関数名)を実際のメモリアドレスへ変換するプロセスのことです。すべての変数と関数に対してこの結合が行われます。特に関数の場合は、コンパイラが関数呼び出しを適切な関数定義と一致させる処理を指します。この結合は、コンパイル時に行われるか、実行時に行われるかのいずれかであり、それぞれがアーリーバインディングとレイトバインディングに対応します。 アーリーバインディング(早

  19. 与えられた木が二分探索木(BST)かどうかを判定するC++プログラム

    二分探索木(Binary Search Tree:BST)とは、以下の3つの性質を満たす二分木データ構造です。あるノードの左部分木には、そのノードのキーより小さいキーを持つノードだけが含まれます。あるノードの右部分木には、そのノードのキーより大きいキーを持つノードだけが含まれます。左右どちらの部分木も、それ自体が二分探索木でなければなりません。アルゴリズムこの判定は、各ノードが取りうるキー値の範囲(最小値〜最大値)を引数として渡しながら木を再帰的にたどることで実現します。ノードの値が許容範囲から外れた時点で、その木はBSTではないと判断できます。開始  関数 BSTUtil()    ノードが

  20. C++で現在のシステム日時を取得・表示する方法

    C++の標準ライブラリには、本格的な日付型が用意されていません。そのため、C++では日付や時刻を扱うための構造体や関数をC言語から引き継いで利用します。日付・時刻関連の関数や構造体を使うには、プログラムに<ctime>ヘッダーファイルをインクルードする必要があります。時刻に関連する型は「clock_t」「time_t」「size_t」「tm」の4種類です。このうち clock_t、size_t、time_t の3つは、システムの日付と時刻を何らかの整数値として表現できます。構造体型「tm」は、日付と時刻を以下のメンバーを持つC構造体として保持します。struct tm { &nbs

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:38/300  20-コンピューター/Page Goto:1 32 33 34 35 36 37 38 39 40 41 42 43 44