C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++で行列の平均ベクトルを求める方法をわかりやすく解説

    M × N の行列が与えられたとき、その平均ベクトルを求めることを考えます。例えば、次のような 3 × 3 の行列があるとします。123456789このとき、平均ベクトルは [4, 5, 6] となります。これは、各列の平均値がそれぞれ次のように計算されるためです。1列目:(1 + 4 + 7) / 3 = 42列目:(2 + 5 + 8) / 3 = 53列目:(3 + 6 + 9) / 3 = 6この例からも分かるように、行列の平均ベクトルとは「各列の平均値を要素として持つベクトル」のことです。したがって、行列の各列ごとに平均を計算し、その結果を順に並べるだけで平均ベクトルを求められます。

  2. C++で配列をバランスさせるために追加する最小の値を見つける方法

    配列のバランスを取る値とはn個の要素(nは偶数)を持つ配列Aがあるとします。この配列をバランスさせるために必要な値を見つけるのが課題です。配列のサイズが偶数であるため、配列を前半と後半の2つに分割できます。バランスが取れている状態とは、前半の要素の合計と後半の要素の合計が一致することを指します。例えば、配列が A = [1, 2, 3, 2, 5, 3] の場合を考えてみましょう。前半 [1, 2, 3] の合計は6、後半 [2, 5, 3] の合計は10です。この2つの合計の差は4なので、配列をバランスさせるためには4という値が必要になります。アルゴリズムの考え方この問題の解法は非常にシンプ

  3. C++でXとの絶対差が最小となるノードを見つける方法

    問題の概要木構造と各ノードの重み、そして整数 x が与えられたとき、|weight[i] − x| の値が最小となるノード i を見つける問題を考えてみましょう。例えば、下図のような木があり、x = 15 とします。この場合、出力は 3 となります。各ノードについて絶対差を計算すると、以下のようになります。ノード 1:|5 − 15| = 10ノード 2:|10 − 15| = 5ノード 3:|11 − 15| = 4ノード 4:|8 − 15| = 7ノード 5:|6 − 15| = 9絶対差が最小となるのはノード 3 の「4」であるため、答えは 3 です。アルゴリズムの考え方アプローチは非

  4. C++の二分探索木(BST)で最小値のノードを見つける方法

    二分探索木(Binary Search Tree、BST)が与えられたとき、その木の中から最小の要素を見つけることを考えます。例えば、以下のようなBSTがあるとします。この場合、最小要素は 1 になります。考え方二分探索木の重要な性質として、左部分木には必ず親ノードより小さい値が格納されるというものがあります。この性質を利用すると、次の手順で最小要素を見つけることができます。ルートノードから探索を開始します。現在のノードの左の子が NULL でない間、左の子へ移動を繰り返します。左の子が NULL になったノードの値が、木全体の中で最小の要素です。この操作の計算量は木の高さに依存し、平衡な二分

  5. C++で配列から4つの要素を選んだ最大積を求める方法

    n個の整数が格納された配列が与えられたとき、その中から4つの要素を選んで作れる積(クアドラプル)の最大値を求める問題について解説します。例えば、配列が [3, 5, 20, 6, 10] の場合、最大積は 6000 となり、このとき選ばれる4つの要素は 10, 5, 6, 20 です。解法のアプローチこの問題は、配列をソートすることで効率的に解くことができます。最大積の候補として考えられるのは以下の3パターンだけです。配列を昇順にソートするx = 最後の4要素(最も大きい4つ)の積とするy = 最初の4要素(最も小さい4つ)の積とするz = 最初の2要素と最後の2要素の積とするx、y、z のう

  6. C++でサイコロの出力シーケンスからプレイヤーの人数を求める方法

    問題の概要 文字列 S と数値 X が与えられ、M 人の異なるプレイヤーがサイコロを振るとします。各プレイヤーは、X 以外の数字が出るまでサイコロを振り続けます。文字列 S において、S[i] は i 回目のサイコロの出目を表しており、このときプレイヤーの総人数 M を求めるのが課題です。なお、文字列 S の最後の文字が X になることはないという制約が付いています。 例えば、文字列が「3662123」で X = 6 の場合、出力は 5 になります。これは以下のように説明できます。 1人目のプレイヤーが振って 3 を出す 2人目のプレイヤーが振って 6、6、2 を出す 3人目のプレイヤーが

  7. C++のアレイディケイ(配列減衰)とは?発生原因と防止方法をわかりやすく解説

    アレイディケイ(配列減衰)とはアレイディケイ(Array Decay:配列減衰)とは、配列が本来持っている型情報や次元(サイズ)の情報が失われてしまう現象のことです。これは、配列を関数に「ポインタ」または「値」として渡したときに発生します。配列を関数に渡すと、実際に渡されるのは配列全体ではなく、先頭要素のアドレスを示すポインタです。そのため、関数の中で sizeof を使っても、元の配列のサイズではなくポインタ自体のサイズが返されてしまいます。アレイディケイの発生を確認するサンプルコード次のC++のコードで、アレイディケイが実際にどのように起こるかを確認してみましょう。#include <

  8. C++のmap・unordered_mapでキーが存在するか確認する方法

    C++のstd::mapやstd::unordered_mapは、キーとそれに対応する値をペアで管理する連想コンテナです。本記事では、指定したキーがマップ内に存在するかどうかを判定する方法を解説します。find()を使ったキーの存在チェック最も一般的な方法は、find()メンバ関数を使うことです。find()は指定したキーを検索し、見つかった場合はその要素へのイテレータを返します。キーが存在しない場合は、終端イテレータend()が返されるため、これを利用して存在判定を行えます。サンプルコード#include<iostream> #include<map> using n

  9. C++で値を指定してセット(set)から要素を削除する方法

    この記事では、C++のset(セット)から、削除したい値を引数として渡すことで特定の要素を削除する方法を解説します。例えば、{10, 20, 30, 50, 60, 80, 90, 100, 120, 200, 500} というセットから 90 を削除したい場合、結果は {10, 20, 30, 50, 60, 80, 100, 120, 200, 500} となります。 set の各要素は重複して格納することができず、常にソートされた順序で管理されます。また、一度追加された要素の値は変更できない(イミュータブルである)という特徴があります。ただし、要素の追加や削除自体は自由に行うことが可能

  10. C++のSTL listから最後の要素を削除する方法

    C++では、STLのstd::listを使うことで、連結リストを手軽に扱うことができます。本記事では、リストの末尾にある最後の要素を削除する方法を解説します。 例えば、[10, 41, 54, 20, 23, 69, 84, 75]という要素を持つリストがあった場合、最後の要素は75です。この最後の要素を削除するには、std::listが提供するpop_back()メンバ関数を使用します。この関数を呼び出すだけで、リストの末尾から要素を取り除くことができます。 サンプルコード 以下のコードでは、配列の要素をリストに格納した後、pop_back()を使って最後の要素を削除し、削除前後のリストの内

  11. C++でマップ(std::map)から最後の要素を削除する方法

    この記事では、C++ STLのマップ(std::map)から最後の要素を削除する方法を解説します。std::mapはキーと値のペアを格納する連想コンテナで、キーに基づいて自動的にソートされるのが特徴です。最後の要素を取得するには prev() 関数を、削除には erase() 関数を使用します。end() が返すイテレータは末尾の要素の「次」の位置を指すため、prev(my_map.end()) とすることで、実際に存在する最後の要素を指すイテレータを取得できます。サンプルコード#include<iostream> #include<map> using namespa

  12. 【C++】std::setから最後の要素を削除する方法をわかりやすく解説

    C++のSTLには、set(セット)という連想コンテナが用意されています。setは要素を自動的に昇順ソートして格納するため、挿入した順序に関係なく、常に整列された状態で管理されます。 本記事では、このsetから最後の要素を削除する方法を解説します。例えば、要素が [10, 41, 54, 20, 23, 69, 84, 75] の配列からsetを作成すると、内部では [10 20 23 41 54 69 75 84] のようにソートされ、最後の要素は 84 になります。この84を削除するコードを見ていきましょう。 ポイント:prev()で最後の要素へのイテレータを取得する setの end()

  13. C++のSTLを使って配列の最大要素を見つける方法

    この記事では、C++のSTL(標準テンプレートライブラリ)を使用して、配列の中から最大要素を見つける方法を解説します。例えば、配列が [12, 45, 74, 32, 66, 96, 21, 32, 27] の場合、最大要素は 96 となります。C++では、<algorithm> ヘッダーに用意されている max_element() 関数を使うことで、自分でループを書かずに最大要素を簡単に取得できます。この関数は、指定した範囲内の最大要素を指すイテレータを返すため、間接参照演算子(*)を使って実際の値を取り出します。サンプルコード#include<iostream> #

  14. C++のSTLで配列の最大要素と最小要素を求める方法

    本記事では、C++のSTL(標準テンプレートライブラリ)を使って、配列の中から最大要素と最小要素を簡単に求める方法を解説します。例えば、配列が [12, 45, 74, 32, 66, 96, 21, 32, 27] の場合、最大要素は 96、最小要素は 12 となります。C++では、<algorithm> ヘッダーに用意されている max_element() 関数と min_element() 関数を使用することで、それぞれ最大値と最小値を簡単に取得できます。これらの関数は、指定した範囲内の要素を走査し、最大(または最小)の要素へのイテレータを返します。そのため、戻り値を参照外し

  15. C++でSTLのaccumulate()関数を使って配列の要素の合計を求める方法

    この記事では、C++のSTL(標準テンプレートライブラリ)を使用して、配列のすべての要素の合計を求める方法を解説します。例えば、配列が [12, 45, 74, 32, 66, 96, 21, 32, 27] の場合、合計は 405 になります。このような合計計算を簡単に行うには、accumulate() 関数を使用します。この関数は <numeric> ヘッダーファイルで定義されており、指定した範囲内の要素を順番に加算していくことができます。accumulate() 関数の基本構文accumulate(first, last, init) の形式で呼び出します。第1引数と第2引数

  16. C++ STLのlistに要素を挿入する方法(先頭・末尾・任意の位置)

    C++のSTL(標準テンプレートライブラリ)には、双方向リンクリストを実装した std::list が用意されています。この記事では、すでにいくつかの要素が格納されたリストに、新しい要素を挿入する方法を解説します。挿入できる位置は「先頭」「末尾」「任意の位置」の3パターンです。要素の挿入方法の概要先頭に挿入する場合:push_front() を使用します。末尾に挿入する場合:push_back() を使用します。任意の位置に挿入する場合:イテレータを初期化し、目的の位置まで移動させてから insert() を呼び出します。それでは、実際のコードを見ながら具体的な使い方を確認していきましょう。サ

  17. 【C++入門】STLのreverse()関数を使って配列を反転する方法

    この記事では、C++のSTL(標準テンプレートライブラリ)を使って配列を反転(逆順に並べ替え)する方法を解説します。例えば、配列が A = [10, 20, 30, 40, 50, 60] の場合、反転後の出力は B = [60, 50, 40, 30, 20, 10] のようになります。 reverse() 関数とは 配列を反転するには、ヘッダーファイル <algorithm> に用意されている reverse() 関数を使用します。この関数は、反転したい範囲の「先頭要素を指すポインタ(イテレータ)」と「末尾要素の次を指すポインタ(イテレータ)」の2つを引数に受け取り、その範囲内

  18. C++のSTLを使って配列をソートする方法をわかりやすく解説

    この記事では、C++のSTL(標準テンプレートライブラリ)関数を使って配列をソートする方法を解説します。例えば、配列が A = [52, 14, 85, 63, 99, 54, 21] の場合、ソート後の出力は [14 21 52 54 63 85 99] となります。配列のソートには、<algorithm> ヘッダーに用意されている sort() 関数を使用します。この関数は、ソート対象の範囲の先頭イテレータと末尾イテレータ(またはポインタ)を引数として受け取ります。通常の配列の場合は、sort(arr, arr + n) のように指定します。サンプルコード#include &l

  19. C++のset(集合)を逆順に走査する方法

    C++のstd::setは、要素が自動的に昇順ソートされて格納される連想コンテナです。本記事では、このsetを逆順(降順)に走査する方法を解説します。例えば、次のようなsetがあるとします。S = [10, 15, 26, 30, 35, 40, 48, 87, 98]これを逆順に走査した場合の出力は、以下のようになります。98 87 48 40 35 30 26 15 10reverse_iteratorを使った逆順走査setを逆順に走査するには、リバースイテレータ(reverse_iterator)を使用します。通常のbegin()・end()の代わりに、以下の2つのメンバ関数を利用します

  20. C++のgetline()で空白行を含む入力を正しく処理する方法

    C++では、getline()関数を使用してストリームから行単位で文字列を読み取ります。この関数は、Enterキーが押されるまで、あるいはユーザーが指定した区切り文字が現れるまで入力を受け付けます。本記事では、getline()関数を使って改行文字や空白行をどのように扱うのか、具体的な実装例とともにわかりやすく解説します。 getline()関数の基本動作 getline()は、<iostream>ヘッダーで提供されている関数です。第1引数に入力ストリーム(通常はcin)、第2引数に読み込んだ文字列を格納するstring型の変数を指定します。標準的な使い方では、1回の呼び出しに

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:98/300  20-コンピューター/Page Goto:1 92 93 94 95 96 97 98 99 100 101 102 103 104