C++継承における名前の衝突と解決方法

継承クラス間での名前競合 1. 派生クラスにおける同名メンバー変数の定義 2. 派生クラスのメンバーによる基底クラス同名メンバーの隠蔽 3. 基底クラスの同名メンバーの存在維持 4. スコープ解決演算子(::)による基底クラス同名メンバーへのアクセス #include <iostream> using namespace std; class Base { public: int value; Base() { ...

6月16日 22:59 投稿

クイックソートアルゴリズム:ピボット選択方法と計算量の解析

クイックソートの基本概念 クイックソートは、分割統治法に基づく効率的なソートアルゴリズムです。これはバブルソートの改良版とも言え、バブルソートのO(n²)の計算量を改善します。クイックソートでは、ある基準値(ピボット)を選び、配列をそれより大きいグループと小さいグループに分割して再帰的に処理します。 問題設定 整数配列を受け取り、クイックソートを使っ ...

6月16日 21:58 投稿

C++によるログモジュールの実装

概要 本記事では、C++でスレッドセーフなログモジュールを実装する方法を紹介します。STLのqueueにロックを追加し、複数のスレッドからのログ出力を安全に処理できるようにします。ログの書き込みは専用スレッドが担当し、非同期でファイルに書き込む仕組みとなっています。 スレッドセーフなキューの実装 複数のスレッドから同時にアクセスされるキューを実現するため、 ...

6月16日 21:27 投稿

データ構造アルゴリズム学習ノート

データ構造 単方向連結リストの操作 // 初期化 void initialize() { top = -1; // リストの先頭を-1に設定 counter = 0; // 使用中のインデックスカウンター } // 先頭に要素を挿入 void insert_at_top(int value) { elements[counter] = value; // 値をカレントノードに格納 next_pointers[counter] = top; // カレントノードの次を現在の先頭に ...

6月16日 18:20 投稿

SMU Winter 2025 個人コンテスト第3回 解説

A. Vasya and Book 現在のページ x から目的のページ y まで、1回の操作で d ページ進むか戻る(ただし範囲外には行けない)ときの最小操作回数を求める。 以下の3通りを検討し、可能なものの最小値を取る: |x - y| が d で割り切れる場合:直接移動可能。回数は |x - y| / d。 先頭ページ(1)経由: (y - 1) % d == 0 のとき、x → 1 → y の合計回数は ceil(x / d) + (y ...

6月16日 16:57 投稿

マトリックス合成による静的フロントエンドUI構築とクラス設計

静的なUIレイアウトを生成する際、低レベルなピクセルデータや行列ベースの画像処理を直接操作するアプローチがあります。これにより、基盤となるコンポジット関数を組み合わせるだけで、複雑な画面構造をコードレベルで組み立てることが可能です。 コンポジット関数のインターフェース設計 基盤処理では、背景バッファに対して特定の図形やテキストを指定座標に貼り付け ...

6月16日 00:46 投稿

オイラーのトーシェント関数と線形ふるい法による計算

例えば、6のオイラーのトーシェント関数を求める場合:6=2×3なので、そのトーシェント関数は6×(2-1)/2×(3-1)/3となります。 原理:1~NのうちNと互いに素な数の個数は、NからNと互いに素でない数を引いたものに等しくなります。Nと互いに素でない数はNの因数の倍数によってふるい落とされますが、一部の数は複数の因数によって複数回ふるい落とされるため、因数の積の倍数を ...

6月15日 22:32 投稿

グラフ理論のアルゴリズム実装ノート

1. 隣接行列を用いたDFS(再帰実装) class GraphStructure { public: GraphStructure(int nodes); void addConnection(int src, int dst); void traverseDFS(int startNode); private: int nodeCount; vector<vector<int>> adjacencyMatrix; vector<bool> visitedFlags; void dfsRecursive(int current); }; GraphStruc ...

6月15日 20:13 投稿

C++のメモリ管理とオブジェクト指向機能の詳細解説

C++メモリ領域の分割 C++プログラム実行時のメモリは4つの領域に分割されます: コード領域: 関数のバイナリコードを格納 グローバル領域: グローバル変数、静的変数、定数を格納 スタック領域: 関数パラメータ、ローカル変数を格納(コンパイラ自動管理) ヒープ領域: プログラマが手動でメモリを割り当て/解放 プログラム実行前のメモリ状態 コンパイル後、実行前 ...

6月15日 20:12 投稿

C++におけるクラスとオブジェクト:デフォルトメンバ関数の詳細

一.クラスの6つのデフォルトメンバ関数 前回の記事ではクラスについて学びました。クラスについて言及する際、避けて通れないのがクラスの6つのデフォルトメンバ関数です。 もしクラスの中に何も記述しない、いわゆる空のクラスの場合: class MyClass {}; // これが空のクラスです しかし、本当に空のクラスは何も持っていないのでしょうか?答えは否定的です。何も記述 ...

6月14日 23:01 投稿