C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. C++ STLのmap::max_size()関数の使い方とサンプルコードを解説

    本記事では、C++ STLにおけるmap::max_size()関数の動作、構文、および具体的な使用例について詳しく解説します。 C++ STLにおけるマップ(map)とは? マップは連想コンテナの一種で、キー値とマップされた値の組み合わせからなる要素を特定の順序で格納することができます。マップコンテナ内のデータは、内部的に常に対応するキーに基づいてソートされます。また、マップコンテナ内の値には、一意なキーを通じてアクセスします。 map::max_size()とは何か? map::max_size()関数は、C++ STLに組み込まれている関数であり、<map>ヘッダファイルで定

  2. C++で複素数のsinh()関数を使う方法|構文とコード例を解説

    C++において複素数の双曲線正弦(ハイパボリックサイン)を求めるには、<complex>ヘッダに定義されているsinh()関数を使用します。つまり、複素数に対してsinh()の値を計算したい場合は、コードに<complex>ヘッダをインクルードする必要があります。この関数は、複素数の複素双曲線正弦を計算するために使われます。 構文 template<class T> complex<T> sinh(const complex<T>& x); パラメータ 引数xには任意の複素数を指定できます。このパラメータはsinh()関数の定

  3. 【C++】複素数のsin()関数の使い方と計算例

    C++では、複素数に対するsin()関数を使用することで、複素数の正弦(サイン)を簡単に計算できます。この関数は<complex>ヘッダーファイル内で定義されているため、sin()の値を求めるには、コードにcomplexヘッダーをインクルードする必要があります。数学的には、この関数は複素数を含むsinの値を計算するために用いられます。 構文 sin()関数の構文は以下の通りです。 sin(z); パラメータ 引数zには任意の複素数を指定できます。このパラメータはsin()関数の定義の中で必須項目として定められています。 戻り値 この関数は複素数を扱うため、sin()の計算結果を複素

  4. C++のmap::count()関数の使い方を徹底解説!構文・戻り値・実用コード例

    本記事では、C++ STLにおけるmap::count()関数の動作原理、構文、そして具体的なコード例について詳しく解説します。 C++ STLにおけるmap(マップ)とは? マップ(map)は連想配列コンテナの一種で、キー値(key)とマップ値(mapped value)を組み合わせた要素を特定の順序で格納できます。マップコンテナでは、データは内部で常にキーに基づいて自動的にソートされ、各値には一意なキーを通じてアクセスします。 map::count()とは? map::count()は、<map>ヘッダファイルに含まれるメンバ関数です。指定したキーを持つ要素の個数を返す機能を持

  5. C++で非増加順(降順)ソートされたvectorの下限と上限を求める方法

    本記事では、C++ STLにおいて非増加順(降順)にソートされた配列に対して、vector::lower_bound()およびvector::upper_bound()を使用する方法について詳しく解説します。 vectorとは vectorは動的配列に近い性質を持つコンテナです。要素の挿入や削除を行うと、必要に応じて自身のサイズを自動的に拡張・縮小できるため、要素数が事前に確定していない場合でも柔軟にデータを管理できます。 lower_boundとupper_boundの動作 降順にソートされたvectorに対しては、次のようなイテレータが返されます。 lower_bound():指定した値

  6. C++ STLで使えるさまざまなコピー方法 ― std::copy()、copy_n()、copy_if()、copy_backward()を徹底解説

    名前のとおり、copy()系のメソッドはC++ STLでデータをコピーするために使われる関数群です。それぞれ機能や受け取る引数が異なり、いずれも<algorithm>ヘッダーファイルに含まれています。ここでは、std::copy()、std::copy_n()、std::copy_if()、std::copy_backward()の4つのメソッドについて、それぞれの特徴と使い方を詳しく見ていきましょう。 copy(start_i1, end_i1, start_i2) このメソッドは、指定した範囲内の要素をあるイテレータから別のイテレータへコピーするために使用します。範囲には開始

  7. 【C++】数値の追加・削除・最大値と最小値の差を返すクエリ処理の実装方法

    この記事では、Q個のクエリを処理する問題を取り上げます。クエリには次の3種類があります。 クエリ1:リストに数値Nを追加する クエリ2:リストから数値Nを削除する クエリ3:リスト内の最大値と最小値の差を返す 私たちのタスクは、これらのクエリ(追加・削除・最大値と最小値の差の取得)を処理するプログラムをC++で作成することです。 問題の概要 リストに対して実行するQ個のクエリが与えられます。クエリには「要素の追加」「要素の削除」「リストの最大値と最小値の差を求める」の3種類があります。まず与えられたクエリを順番に処理してリストを構築し、クエリ3が呼ばれた時点でリスト内の最大値と最小値の差

  8. C++で二分木の2つのノード間の距離を求めるプログラムの作成方法

    この記事では、二分木(バイナリツリー)と木の中の2つのノードが与えられたときに、それらのノード間の距離を求めるC++プログラムの作成方法を解説します。問題の概要ここでいう「2つのノード間の距離」とは、一方のノードからもう一方のノードへ移動する際に通過する辺(エッジ)の最小本数のことを指します。具体例を挙げて、問題を確認してみましょう。入力二分木Node1 = 3、Node2 = 5出力3出力の解説ノード3からノード5までの経路は「3 → 1 → 2 → 5」です。この経路で通過する辺は3本であるため、2つのノード間の距離は3となります。解法のアプローチこの問題に対する基本的な解法は、最小共通祖

  9. C++で辞書式順序におけるX番目に小さい部分文字列を求めるクエリを解く方法

    この記事では、文字列 str と Q 個のクエリが与えられる問題を扱います。各クエリには数値 X が含まれており、C++ を使って「辞書式順序で X 番目に小さい部分文字列」を答えるプログラムを作成するのが課題です。 問題の概要 各クエリに対して、文字列から生成できるすべての部分文字列をアルファベット順(辞書式順序)に並べ替えたとき、X 番目に位置する部分文字列を求める必要があります。 具体例を見て理解しましょう。 入力: str = point Q = 4、query = {4, 7, 2, 13} 出力: n, oi, in, poin 解説 str のすべての部分文字列を辞書式順序に並べ

  10. 【C++】数値がN個の区間[L, R]のいずれかに含まれるかを判定するクエリ処理

    この問題では、N個の区間 [L, R] と、それぞれ数値 val を含む Q 個のクエリが与えられます。求められるのは、各クエリで与えられた数値がN個の区間のうち少なくとも1つに含まれているかどうかを判定するプログラムをC++で作成することです。問題の概要N個の区間 [L, R] が与えられ、各区間は L から R までの整数をすべて含みます。たとえば区間 [3, 6] なら、3・4・5・6 の4つの整数を含みます。各クエリでは判定対象となる数値 val が渡され、val がいずれかの区間に含まれていれば true(存在する)、どの区間にも含まれていなければ false(存在しない)を返します

  11. C++でボックスを円状に結合できるかを確認するクエリの判定方法

    このチュートリアルでは、ボックスを円状に結合できるかどうかを確認するクエリを処理するプログラムについて解説します。ここでは、1からnまでの番号が振られたボックスが円状に並んでいるものとします。各クエリに対して、ボックスiとボックスjを棒で接続しても、すでに設置済みの棒と交差しないかどうかを判定するのが課題です。アルゴリズムの考え方各クエリを処理する際は、まずiとjの大小関係を整えます。新しい棒が既存の棒と交差するのは、一方の棒の両端がもう一方の棒の両端の間に挟まれる場合です。そこで、すでに接続済みのボックスの位置情報を配列に記録しておき、交差の条件に該当するかどうかを順にチェックします。交差し

  12. 【C++】指定範囲内に特定の数字が存在するかどうかを判定するクエリ処理

    この記事では、配列 arr[] と複数のクエリ(各クエリは L、R、val の3つの値で構成される)が与えられたとき、C++ を使って「指定された範囲内に特定の数字が存在するか」を判定するプログラムを作成する方法を解説します。問題の概要各クエリに対して、範囲 L ~ R の間に要素 val が含まれているかどうかを確認する必要があります。具体例で確認してみましょう。入力:arr[] = {4, 8, 1, 7, 2, 9, 3, 5, 1}Q = 3query = {{1, 4, 3}, {0, 2, 1}, {4, 7, 2}}出力:Not Present Present Present出力

  13. 【C++】オイラーのトーティエント関数で1からNまでの互いに素なペアの数を数える

    問題概要 この問題では、それぞれ異なる数値 N を含む Q 個のクエリ が与えられます。求めるのは、1 から N までの範囲に存在する「順序を区別しない互いに素なペア」の総数です。本記事では、これを効率的に解く C++ プログラムを紹介します。 互いに素(コプライム / coprime)は、相対素数・相互素数とも呼ばれ、共通の約数が 1 のみであるような 2 つの数の組み合わせを指します。たとえば (3, 4) は最大公約数が 1 なので互いに素ですが、(4, 6) は公約数に 2 を持つため互いに素ではありません。 具体例で理解しよう N = 5 の場合を考えてみましょう。 出力: 10

  14. 二分木の2つのノード間の距離を求めるクエリ – C++でのO(log n)手法

    この問題では、二分木とQ個のクエリが与えられます。私たちのタスクは、C++でO(log n)の計算量を使って、二分木の2つのノード間の距離を求めるプログラムを作成することです。問題の概要各クエリでは、二分木の2つのノードが与えられ、その2つのノード間の距離を求める必要があります。ここでの「距離」とは、一方のノードからもう一方のノードに到達するために通過する必要がある辺(エッジ)の数を意味します。具体例を見て問題を理解しましょう。入力:二分木クエリ数 = 3 [2, 6] [4, 1] [5, 3]出力:3, 2, 3解決アプローチこの問題を解くには、最小共通祖先(LCA:Lowest Comm

  15. C++で要素更新に対応する「範囲内の最大積ペア」クエリを実装する方法

    この問題では、配列 arr[] と Q 個のクエリが与えられます。各クエリは次の2種類のいずれかです。タイプ1: 指定された範囲 [Start〜End] 内で、積が最大になるペアを見つけるタイプ2: i 番目の要素を指定された値に更新する本記事では、要素の更新処理を含む「範囲内の最大積ペアを求めるクエリ」を C++ で解くプログラムの作成方法を、単純な解法と効率的な解法の両面から解説します。入出力例で問題を理解する入力:arr = {4, 2, 6, 9, 1} Q = 3 Q1 = [1, 1, 4] Q2 = [2, 2, 3] Q3 = [1, 0, 2]出力: 54, 12解説クエリ1

  16. 【C++】指定された文字列の部分文字列内の最後の非反復文字を求めるクエリの解き方

    この記事では、与えられた文字列 str と Q 個のクエリ(各クエリは2つの整数で構成)に対して、C++ で「指定された文字列の部分文字列内にある、一度しか登場しない文字のうち最も右側にあるもの(最後の非反復文字)」を検索するプログラムを作成します。文字列処理とクエリ処理の定番テクニックである累積カウント(プリフィックスカウント)を活用した効率的な解法をわかりやすく解説します。 問題の説明 各クエリには2つの整数 L と R が与えられます。クエリを処理する際は、インデックス L から R までの部分文字列を取り出し、その中で繰り返し現れない(出現回数が1回だけの)最後の文字を見つけます。該当

  17. 【C++】数がちょうど4つの異なる約数を持つかどうかを判定するクエリ問題の解法

    この記事では、Q個のクエリが与えられ、各クエリに数Nが含まれるという問題を扱います。C++を用いて、各数Nが「ちょうど4つの異なる約数」を持つかどうかを効率的に判定するプログラムを作成していきましょう。 問題の概要 各クエリに対して、数Nの約数がちょうど4個であるかを調べます。4個であれば「YES」、そうでなければ「NO」を出力してください。 入力例: Q = 3、クエリ: 4, 6, 15 出力例: NO YES YES 出力の解説 クエリ1(N = 4): 4の約数は 1, 2, 4 の3個なので「NO」 クエリ2(N = 6): 6の約数は 1, 2, 3, 6 の4個なので「YES」

  18. C++ですべての部分集合の積の総和を求めるアルゴリズムと効率的な解法

    この問題では、N個の数値からなる配列 arr[] が与えられ、考えられるすべての部分集合について要素の積を計算し、その総和を求めるプログラムをC++で作成します。 基本的な考え方は、まずすべての部分集合を列挙し、それぞれの部分集合に含まれる要素の積を求め、最後にそれらをすべて加算するというものです。 問題例 入力: arr[] = {4, 5, 6} 出力: 209 説明: arr[] のすべての部分集合: {4}, {5}, {6}, {4, 5}, {5, 6}, {4, 6}, {4, 5, 6} 積の総和 = (4) + (5) + (6) + (4×5) + (5×6) + (4

  19. C++で級数 0.7、0.77、0.777… の最初のn項の総和を求める方法

    問題概要 本記事では、級数「0.7、0.77、0.777…」の最初の n 項が与えられたとき、その総和を求めるプログラムを C++ で作成します。 問題を理解するための例 入力:4 出力:3.0247 説明:0.7 + 0.77 + 0.777 + 0.7777 = 3.0247 級数の和の一般公式の導出 各項を順番に加算しても合計は求められますが、級数の構造を利用して一般公式を導出すれば、より効率的に計算できます。以下がその導出過程です。 sum = 0.7 + 0.77 + 0.777 + …(n項まで) sum = 7 × (0.1 + 0.11 + 0.111 + …(n項まで))

  20. C++で級数 1/1 + (1+2)/(1×2) + (1+2+3)/(1×2×3) + … のn項までの合計を求める方法

    本記事では、整数 n が与えられたとき、次の級数の n 項までの合計を求めるプログラムを C++ で作成します。級数: 1/1 + (1+2)/(1×2) + (1+2+3)/(1×2×3) + … (n 項まで)この級数の第 k 項は「1からkまでの総和(sum)」を「1からkまでの総乗(積:prod)」で割った値になっています。例で問題を理解しよう入力n = 3出力3.5説明 −(1/1) + (1+2)/(1×2) + (1+2+3)/(1×2×3) = 1 + 1.5 + 1 = 3.5解法のアプローチこの問題に対するシンプルな解法は、i = 1 から n までループ処理を行うことです

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:207/300  20-コンピューター/Page Goto:1 201 202 203 204 205 206 207 208 209 210 211 212 213