LeetCodeの連結リスト問題解法:ノード交換、削除、交差検出、循環検出
ノードのペア交換(問題24)
連結リストの隣接ノードを交換する実装例。ダミーノードを使用し、3つのポインタで前後関係を管理します。
class Solution {
public:
ListNode* swapNodePairs(ListNode* head) {
ListNode dummy(0);
dummy.next = head;
ListNode* current = &dummy;
while (current->next && current->next-> ...
7月10日 22:22 投稿
C++ accumulate関数における初期値型の影響と注意点
std::accumulateアルゴリズムは、指定範囲の要素を集約するためのSTL関数です。この関数の戻り値型は第三引数の初期値型に厳密に依存し、型の選択が計算結果に重大な影響を与えます。
#include <numeric>
#include <vector>
#include <iostream>
int main() {
std::vector<double> numList = {2.5, 1.7, 3.2, 4.1};
std::cout << s ...
7月10日 21:36 投稿
WinCEにおけるGetForegroundWindow使用時の疑問
プロジェクトのナビゲーション機能実装中に、特定の条件下でロードイング画面が表示されない現象が発生。この問題の原因として、Windows APIのGetForegroundWindow()関数呼び出しが関与していることが判明した。この関数はアクティブウィンドウのハンドルを取得する目的で使用されていたが、意図せずに画面表示に影響を与えていた。
{
HWND activeWindow = GetFor ...
7月10日 19:00 投稿
Qtシグナルスロット機構における基底クラスと派生クラスの受け渡しパターン
Qtのシグナルスロット機構で基底クラス型のオブジェクトを非同期的に渡す際、派生クラスの特性やスレッド親和性によって予期しない動作が発生しやすい。本稿では、値渡し・参照渡し・ポインタ渡しそれぞれの動作特性と、実装上の課題を具体的なコード例を通じて整理する。
検証用クラス定義
以下にテスト用の基底クラスと派生クラスを定義する。デストラクタと仮想関数を ...
7月10日 16:42 投稿
C++ 設計パターン:ファクトリメソッドと単純ファクトリの比較実装
オブジェクト生成の結合度を下げる
オブジェクト指向設計において、クライアントコードが具体的なクラスを直接インスタンス化すると、結合度が高まり、拡張が困難になります。ファクトリパターンは、このインスタンス生成のロジックをカプセル化し、システムの変更影響範囲を最小限に抑えるための手法です。ここでは、自動車の生成を例に、単純ファクトリとファクトリメソ ...
7月10日 03:03 投稿
C++ STL 文字列コンテナの操作と実装
主なインターフェース
コンストラクタ
関数名機能
string()空の文字列オブジェクトを生成
string(const char* s)C文字列から文字列オブジェクトを生成
string(size_t n, char c)n個の文字cで構成される文字列を生成
string(const string& s)コピーコンストラクタ
void test1() {
string str1; // 空の文字列を生成
cout
7月10日 00:22 投稿
C++におけるstd::tieの活用方法
std::tieとは何か
std::tieはC++の標準ライブラリで提供される関数テンプレートであり、複数の左値参照からなるタプルを作成します。この機能は、複数の戻り値を持つ関数の結果を個別の変数に展開する際に特に便利です。
std::unordered_map::insertの戻り値
std::unordered_mapのinsertメソッドはstd::pairを返します。このペアには2つの要素が含まれます:
最初の要素 ...
7月8日 23:21 投稿
C++のcstringライブラリ:文字列操作関数の詳細解説
C++におけるcstringライブラリの概要
C++プログラミングにおいて、#include <cstring>はCスタイルの文字列(ヌル文字'\0'で終わる文字配列)を操作するための関数群を提供するヘッダファイルをインクルードするディレクティブです。このライブラリには、文字列のコピー、比較、連結、検索など、基本的な文字列操作関数が含まれています。
文字列のコピー関数
strcp ...
7月8日 21:46 投稿
動的計画法によるナップサック問題と等和分割問題の解法
46.研究材料の持ち運び問題
動的計画法を用いたナップサック問題の解法について解説する。`dp`配列を定義し、`dp[i][j]`はi個の物品をjの容量で運ぶ際の最大価値を表す。漸化式は以下の2つのケースに分けられる:
1. 物品を入れられる場合:`dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i])`
2. 物品を入れられない場合:`dp[i][j] = dp[i-1][j]`
初期化処 ...
7月8日 20:21 投稿
Qtでマウスドラッグによる矩形移動を実装する
Qtでドラッグ可能な矩形を実現するには、QWidgetを継承したカスタムクラスを作成し、マウスイベントのハンドリングと描画処理を統合します。以下は、座標変換を正確に扱い、親ウィジェット内での安定したドラッグ動作を保証する改良版実装です。
まず、DraggableBoxという名前のカスタムウィジェットを定義します。このクラスは、ドラッグ中の相対オフセットを保持し、親 ...
7月8日 20:17 投稿