C++におけるスマートポインタの活用と実装

スマートポインタの概要 スマートポインタの重要性 スマートポインタは、現代のC++アプリケーション開発において不可欠なメモリ管理メカニズムです。従来の生ポインタでは、開発者が明示的にメモリ確保と解放を管理しなければならず、メモリリークやダングリングポインタ、ダブルフリーなどの問題が発生しやすかったのです。スマートポインタを活用することで、オブジェ ...

5月31日 19:40 投稿

C++でvectorコンテナを自作実装する方法

C++の標準ライブラリで提供されるstd::vectorの動作を理解するために、独自の動的配列クラスを実装します。この記事では、イテレータ、メモリ管理、要素アクセス、変更操作などの実装手順をコード例とともに解説します。 メンバ変数 std::vectorと同様に、内部では3つのポインタ(イテレータ)で管理します。std::stringとは異なり、サイズやキャパシティはこれらのポイン ...

5月30日 17:22 投稿

C++のアルゴリズムとその応用

C++の標準ライブラリは、効率的なデータ操作を支援する多くのアルゴリズムを提供しています。これらのアルゴリズムは、コンテナ内の要素を検索、変更、並べ替え、統計情報の取得など、さまざまな目的で使用されます。 1. 非変更アルゴリズム これらのアルゴリズムは、コンテナ内の要素を変更せずに操作します。 1.1 find と find_if find(first, last, value): 指定した値 ...

5月27日 14:05 投稿

プログラミングコンテスト問題集(7問)

L1-1 人と神 指定された文字列を直接出力するPHP実装 <?php echo "To iterate is human, to recurse divine."; ?> L1-2 C言語速習 基本数値計算処理の実装例 #include <iostream> using namespace std; void calculate() { int total, studied, hours; cin >> total >> studied >> hours; cout input; int century = input / 100; ...

5月25日 23:04 投稿

C++のvectorコンテナの内部構造と実用的な使い方

std::vectorはC++標準ライブラリで提供される動的配列で、メモリ上に要素を連続的に配置します。固定長配列と異なり、実行時にサイズを柔軟に変更できるのが特徴です。 1. vectorのメモリ管理 vectorは2つの重要な状態情報を管理します:容量(capacity)と現在の要素数(size)。 容量:確保済みのメモリ領域の大きさ サイズ:実際に格納されている要素数 要素追加 ...

5月24日 23:56 投稿

C++開発職向け2024年新卒筆記試験問題と解説

一、単一選択問題 1-1 配列 int a[2][3]; が宣言されているとき、a の要素への正しいアクセス方法は? A. a[0][1+1] B. a[1][3] C. a[1,3] D. a(1)(1) 1-2 関数オーバーロードに関する正しい記述は? A. オーバーロード関数の名前は異なってもよい B. 引数の個数が必ず異なる必要がある C. 戻り値の型が異なっていなければならない D. 引数リストが異 ...

5月20日 11:12 投稿

C++を用いたコンテスト参加者情報管理システムの実装

contestant.hpp #pragma once #include <iomanip> #include <iostream> #include <string> struct Participant { long studentId; std::string fullName; std::string department; int problemCount; int totalTime; }; std::ostream& operator<<(std::ostream& out, const Participant& p) { out << s ...

5月19日 19:33 投稿

C++のunique関数による重複削除処理

C++のSTLに含まれるunique関数は、隣接する重複要素を除去するための便利な機能です。この関数は<algorithm>ヘッダファイルに定義されており、配列やコンテナ内の連続した重複データを効率的に処理できます。 unique関数の動作原理 unique関数はソート済みのデータに対して最も効果を発揮します。この関数は重複要素を物理的に削除するのではなく、重複する要素を ...

5月18日 18:21 投稿

C++における訪問者パターンの変種

1、非破壊シーケンスアルゴリズム これらのアルゴリズムは操作対象のコンテナ内の要素を変更しません。 1.1 find と find_if find(begin, end, value):value に等しい最初の要素を検索し、イテレータを返す(見つからない場合は end を返す)。 find_if(begin, end, predicate):述語を満たす最初の要素を検索する。 find_end(begin, end, sub_begin, sub_end):サブシー ...

5月18日 11:14 投稿

C++プログラミングの重要な注意点とベストプラクティス

1. イテレータとペアの値へのアクセス方法の違い イテレータを介して値にアクセスする場合と、ループ内で直接ペアオブジェクトにアクセスする場合で、ドット演算子とアロー演算子の使い分けが必要です。 class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { std::unordered_map hash_map; for(int i = 0; i < ...

5月16日 00:32 投稿