C++スタック、キュー、優先度付きキューの基礎と実装

スタック(Stack) スタックはLIFO(Last In First Out)のデータ構造であり、コンテナアダプタとして実装されます。標準ライブラリではstd::stackが提供されており、主な操作は以下の通りです。 メンバ関数説明empty()スタックが空かどうかを判定size()要素数を取得top()最上位の要素への参照を取得push()要素を先頭に追加pop()最上位の要素を削除 最小スタックの実装 定 ...

7月2日 18:28 投稿

C++における継承と多態性の実装例

ロボットペットの多態性デモ pets.hpp #pragma once #include <string> #include <iostream> class RoboPet { public: RoboPet(const std::string& name); virtual std::string vocalize() = 0; std::string get_name() const; private: std::string pet_name; }; RoboPet::RoboPet(const std::string& name) : pet_name{name} {} ...

6月25日 18:05 投稿

C++ 標準ライブラリにおけるテストカバレッジ閾値の最適化戦略

STL 品質保証におけるカバレッジ基準の重要性 C++ 標準テンプレートライブラリ(STL)は、あらゆる C++ アプリケーションの基盤として機能するため、その信頼性は極めて重要です。単にテストを実行するだけでなく、科学的な根拠に基づいたコードカバレッジの閾値を設定することは、バグの混入を防ぎ、ライブラリの長期的な安定性を維持するために不可欠です。 インフラス ...

6月24日 19:49 投稿

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

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

6月16日 21:27 投稿

C++におけるアルゴリズムの効率的な活用と実装例

1. 要素を変更しないシーケンス操作 これらの関数は元データを改変せず、検索・集計・条件評価などの処理を行います。 1.1 検索系:find, find_if, find_end std::vector<int> data = {10, 20, 30, 40, 50}; // 値30を検索 auto pos = std::find(data.cbegin(), data.cend(), 30); if (pos != data.cend()) { std::cout << "見つかった値: " << *p ...

6月15日 23:02 投稿

C++のレガシー関数アダプタ:std::mem_funによるメンバ関数ポインタのラッピング

C++において、関数呼び出し演算子operator()を定義したオブジェクトは関数オブジェクトと呼ばれます。標準ライブラリは、これらのオブジェクトを生成・操作する機能を提供しており、その一つにメンバ関数ポインタから関数オブジェクトを生成するアダプタが存在します。 レガシーなバインダとアダプタ メンバ関数を一般的な呼び出し可能オブジェクトとして扱うために、C++98 ...

6月14日 22:16 投稿

C++アルゴリズムの概要

C++の標準テンプレートライブラリ(STL)は、多くのアルゴリズムを提供しており、これらはコンテナ内の要素を効率的に操作するためのものです。 1. 非変更アルゴリズム これらのアルゴリズムは、操作対象となるコンテナの要素を変更しません。 1.1 findとfind_if find(first, last, value): valueと一致する最初の要素を見つけてイテレータを返します(見つからなければlast ...

6月11日 17:01 投稿

Codeforces Round 1002 (Div. 2)

A - 二つの配列と要素の組み合わせ 問題文 2つの長さnの配列a,bが与えられる。この配列の各要素は少なくとも2回以上出現する。配列aとbを並べ替えて、c_i = a_i + b_iとなる長さnの配列cを作る。このcに3種類以上の異なる要素が存在するか判定せよ。 解法 n ≥ 3のため、aとbのそれぞれに含まれる異なる要素の数を確認する。aが1種類でbが2未満、または逆の場合にのみ「No ...

6月6日 22:31 投稿

C++ STLアルゴリズムの使い方と実装例

1. 非変更シーケンス操作 これらのアルゴリズムはコンテナの要素を変更しない。 1.1 find系関数 find(first, last, value):値がvalueと等しい最初の要素を検索。 find_if(first, last, pred):述語predを満たす最初の要素を検索。 find_end(first, last, s_first, s_last):部分列の最後の出現位置を検索。 #include <vector> #include <algorithm> #inc ...

6月4日 19:07 投稿

C++におけるsetとmapの基本的な使い方

連想コンテナについて これまでにSTLの一部のコンテナ、例えばvector、list、dequeなどを学んできました。これらのコンテナは線形構造を持つシーケンシャルコンテナと呼ばれます。 では、連想コンテナとシーケンシャルコンテナの違いは何でしょうか? 連想コンテナとは、各要素がキー(key)と値(value)を持つコンテナです。要素が連想コンテナに挿入される際、内部構造は赤 ...

6月3日 23:59 投稿