-
C++の非仮想関数内で仮想関数が呼び出されるとどうなりますか
このセクションでは、C++の仮想クラスに関する興味深い事実について説明します。最初に2つのケースを確認してから、事実を分析します。 最初は、仮想関数を使用せずにプログラムを実行します。 非仮想関数の下で任意の仮想関数を使用してプログラムを実行します。 例 理解を深めるために、次の実装を見てみましょう- #include <iostream> using namespace std; class BaseClass { public: void display(){ cout << &q
-
C++で派生クラスメソッドにさらに制限されたアクセスが与えられるとどうなりますか
このセクションでは、C++での派生クラスメソッドへのアクセスを制限する興味深い事実について説明します。いくつかの例を見て、出力を分析して、C++で派生クラスメソッドを使用する際の制限について詳しく説明します。 例(C ++) 理解を深めるために、次の実装を見てみましょう- #include <iostream> using namespace std; class BaseClass { public: virtual void display(){ cout << "Print funct
-
オブジェクトがC++のブロック内に作成された場合、オブジェクトはどこに格納されますか?
このセクションでは、C++プログラムのコンパイル時に変数とオブジェクトがメモリ内のどこに格納されるかについて説明します。ご存知のように、オブジェクトを保存できるメモリには2つの部分があります- スタック −メモリのブロック内で宣言されたすべてのメンバーは、スタックセクション内に格納されます。 main関数も関数であるため、その中の要素はスタック内に格納されます。 ヒープ −一部のオブジェクトが動的に割り当てられると、それはヒープセクション内に格納されます。 ブロックまたは関数内で宣言されたオブジェクトのスコープは、それが作成されたブロックに限定されます。オブジェクトは、ブロッ
-
C ++で空のクラスのサイズがゼロではないのはなぜですか?
C++に空のクラスが1つあるとします。次に、サイズが0かどうかを確認します。実際、標準ではサイズ0のオブジェクト(またはクラス)は許可されていません。これは、2つの異なるオブジェクトが同じメモリ位置を持つことが可能になるためです。これが、空のクラスでも少なくとも1のサイズが必要であるという概念の背後にある理由です。空のクラスのサイズはゼロではないことが知られています。通常は1バイトです。以下の例を参照してください。 例 理解を深めるために、次の実装を見てみましょう- #include<iostream> using namespace std; class MyClass { }
-
オブジェクトを動的にのみ割り当てることができるC++クラスを作成するにはどうすればよいですか?
この問題では、動的メモリ割り当てによってのみオブジェクトを作成でき、直接オブジェクトを作成できない1つのクラスを作成する方法を説明します。 アイデアは単純です。そのクラスのプライベートデストラクタを作成する必要があります。デストラクタがプライベートの場合、コンパイラは、動的に割り当てられていないオブジェクトに対してコンパイラエラーを生成します。これは、オブジェクトが使用できなくなったら、コンパイラがそれらをスタックセグメントから削除する必要があるためです。動的に割り当てられたオブジェクトの場合、プログラマーはオブジェクトの削除を担当しますが、コンパイラーはその責任を負わないため、オブジェクト
-
C++のSTL関数によって返されるポインタを使用してインデックスを計算する
このセクションでは、C++のSTLによって返されるポインターを使用してインデックスを生成する方法を説明します。 C ++の多くの組み込み関数は、目的の番号のアドレスを提供するメモリ内の位置へのポインタを返しますが、戻り値のコンテナ内の実際のインデックスとは関係ありません。例として、コード内の最大要素を決定するために、std ::max_element()関数を使用します。これは、目的の要素のインデックスを返しませんが、メモリ内のアドレスを返します。ただし、そのアドレスからインデックスを取得する必要がある場合もあります。ここでは、インデックスを生成する方法を説明します。 最初のイテレータを減算す
-
C++でのガウスフィルターの生成
ご存知のとおり、ガウスフィルタリングは、画像処理の分野で非常に役立ちます。画像のノイズを低減するために使用されます。このセクションでは、2Dガウスカーネルを生成する方法を説明します。 2Dカーネルを生成するためのガウス分布は次のとおりです。 $$ G(x、y)=\ frac {1} {2 \ Pi \:\ sigma ^ {2}} e ^ {\ frac {x ^ {2} + y ^ {2}} {2 \ sigma ^ {2}}} $$ 例 理解を深めるために、次の実装を見てみましょう- #include <cmath> #include <iomanip> #i
-
テストケースの生成(C ++でのgenerate()およびgenerate_n()
このセクションでは、C++STL関数を使用してテストケースを生成する方法を説明します。配列プログラムのテストケースの生成は、非常に複雑で非効率的なプロセスになる場合があります。 C ++には、テストケースを生成するための2つの方法があります。これらの方法は次のとおりです- generate()メソッド C++関数std::alarmithm ::generate()は、genの連続呼び出しによって返される値を、最初から最後までの範囲の要素に割り当てます。最初、最後、およびgenの3つのパラメーターを取ります。これらは、初期位置への順方向イテレーター、最終位置への逆方向イテレーター、および引
-
C++で複素数を使用したジオメトリ
このセクションでは、C++でSTLの複合クラスを使用してポイントクラスを作成する方法を説明します。そして、それらをいくつかのジオメトリ関連の問題に適用します。複素数は、STL(#include )の複素数クラス内にあります。 ポイントクラスの定義 複合点をポイントにするには、complex の名前をpointに変更してから、xを複合クラスのreal()に変更し、yを複合クラスのimag()に変更します。したがって、ポイントクラスをシミュレートできます。 # include <complex> typedef complex<double> point; # defin
-
C ++ STLでマップ(またはunordered_map)をトラバースする
ここでは、マップコンテナとC++での使用について説明します。マップは、ハッシュマップ方式で要素を格納する連想コンテナとして定義されます。各要素はキーと値に関連付けられています。 2つのマップされた値が同一のキーを持つことはできません。これらは、C++のマップコンテナ内に存在するいくつかの基本的なメソッドです。 begin():これはマップの最初の要素にイテレータを返します。 end() −これにより、マップの最後の要素に続く理論要素にイテレータが返されます。 size() −これはマップ内の要素の数を返します。 max_size() −これは、マップが保持できる要素の最大数を返し
-
C++での均一な初期化
ここでは、C++での均一な初期化について説明します。これはC++11バージョンからサポートされています。均一な初期化は、一貫した構文を使用して、プリミティブ型から集合体までの範囲の変数とオブジェクトを初期化できるようにする機能です。つまり、中かっこ({})を適用して初期化子の値を囲む中かっこ初期化を導入します。 構文 type var_name{argument_1, argument_2, .... argument_n} 動的に割り当てられたアレイを初期化する 例(C ++) 理解を深めるために、次の実装を見てみましょう- #include <bits/stdc++.h> u
-
C++でのユーザー定義リテラル
ここでは、C++でのユーザー定義リテラルの概念を説明します。 C ++バージョン11から、ユーザー定義リテラル(UDL)がC++に追加されました。 C ++は、さまざまな組み込み型のリテラルも提供しますが、これらは制限されています。 組み込みリテラル- 31(整数) 3.5(ダブル) 4.2F(フロート) p(文字) 31ULL(Unsigned Long Long) 0xD0(符号なし16進整数) pq(文字列) 組み込みのリテラルとは別に、ユーザー定義のリテラルが必要になる場合があります。その背後にあるいくつかの理由があります。いくつかの例
-
C ++の2Dマトリックス(反復アプローチ)からリンクリストを作成します
行列が1つあるとすると、反復アプローチを使用して2Dリンクリストに変換する必要があります。リストには右ポインタと下ポインタがあります。 したがって、入力が次のような場合 10 20 30 40 50 60 70 80 90 出力はになります これを解決するには、次の手順に従います- real_head:=NULL サイズがmの配列head_arrを定義します。 初期化i:=0の場合、i
-
C++の2Dマトリックスからリンクリストを作成します
行列が1つあるとすると、再帰的アプローチを使用して2Dリンクリストに変換する必要があります。 リストには右ポインタと下ポインタがあります。 したがって、入力が次のような場合 10 20 30 40 50 60 70 80 90 出力はになります これを解決するには、次の手順に従います- 関数make_2d_list()を定義します。これは、行列mat、i、j、m、n、を取ります。 iとjが行列の境界にない場合、- nullを返す temp:=値mat [i、j]で新しいノードを作成します 温度
-
C++の平衡二分探索木で与えられた合計を持つペアを見つけます
平衡二分探索木とターゲット合計があるとすると、合計がターゲット合計に等しいペアであるかどうかをチェックするメソッドを定義する必要があります。この場合。二分探索木は不変であることに注意する必要があります。 したがって、入力が次のような場合 その場合、出力は(9 + 26 =35)になります。 これを解決するには、次の手順に従います- スタックs1、s2を定義する done1:=false、done2:=false val1:=0、val2:=0 curr1:=root、curr2:=root 無限ループ、実行- done1がfalseの場合、do − curr1が
-
C++でのマージソートの最悪のケースを引き起こす順列を見つけます
要素のセットがあるとします。これらの要素のどの順列がマージソートの最悪の場合になるかを見つける必要がありますか?漸近的にわかるように、マージソートは常にO(n log n)時間を消費しますが、場合によっては、より多くの比較が必要になり、より多くの時間が消費されます。ここでは、典型的なマージソートアルゴリズムを実装してソートするときに、より多くの比較を必要とする入力要素の順列を見つける必要があります。 したがって、入力が[11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]の場合、出力は[11,19 、15、23、13、21、17、25、12、20、
-
C++でソートするために個別にソートできるパーティションの最大数
要素が0からN-1の範囲にあるN個の数値の配列が与えられます。要素はソートされていません。目標は、個別に並べ替えることができ、次に連結して長さNの並べ替えられた配列全体を作成できる配列のパーティションの最大数を見つけることです。 各パーティションは、その中の要素がソートされないように選択されます。 0からN-1の範囲のN個の数値の場合、ソートされた要素のインデックスは値と等しくなります。 Arr [i]=i。 これを解決するには、各要素をその左側でこれまでに見つかった最大値で比較します。最大値の正しい位置に到達すると、(最大値==i)。左側のすべての要素が少ないため、個別のパーティションを
-
2つの数値による除算がC++の利益に関連付けられている場合、利益を最大化します
5つの整数N、A、B、Xが与えられます およびY 。目標は、[1からN]の範囲の数値の間で、の場合、それをチェックすることによって利益を最大化することです。 数値はAで割り切れ、利益は X増加します 。 数値はBで割り切れ、利益は Y増加します 。 範囲内の特定の数に対して、利益を1回だけ追加できます。 例を挙げて理解しましょう。 入力 − N =4、A =2、B =3、X =2、Y =3 出力 −最大利益は− 7 説明 − 2,4はA(2)で割り切れます。利益は0から2に増加し、次に2から4に増加します(X =2) 3はB(3)で割り切れます。利益は4から
-
C++で配列内の素数を数える
一連の数字が表示されます。目標は、その配列内の素数の数を見つけることです。 素数は、1とその数自体で割り切れる数です。それには2つの要素しかありません。最初の要素から最後の要素まで素数であるかどうかを確認し、これまでに見つかった素数の数を増やします。 数Nが素数であるかどうかを確認するには、[2からN / 2]の範囲の数が、Nを完全に除算するかどうかを確認します。そうであれば、素数ではありません。それ以外の場合は素数です。 例を挙げて理解しましょう。 入力 − arr [] ={1,2,3,4,5,6,7,8,9} 出力 −素数の数− 4 説明 −ここで、2,3,5,7は素数で
-
C++で指定された範囲内の最小要素の数をカウントします
=1およびR<=N。となるようなR これを行うには、範囲LとRにある要素をトラバースして、最小のものを見つけます。 ここでも、範囲LとRの要素をトラバースし、いずれかの要素が手順1で計算された最小値に等しい場合はカウントをインクリメントします。 例を挙げて理解しましょう。 入力 − arr [] ={1,2,3,0,3,2,0,1}、N =8、L =2、R =5 出力 −範囲内で最小のカウント− 1 説明 − L(1)からR(5)の範囲の要素は、arr[1]からarr[4]です。 {2,3,0,3}。最小値は0です。0のカウントは1です。 入力 − arr [