-
リストヘッドでチェーンするハッシュテーブルを実装するC++プログラム
ハッシュテーブルは、キーと値のペアを格納するために使用されるデータ構造です。ハッシュ関数は、要素が挿入または検索される配列へのインデックスを計算するためにハッシュテーブルによって使用されます。 これは、リストヘッドを使用してチェーンするハッシュテーブルを実装するためのC++プログラムです。 アルゴリズム 挿入の場合: Begin Declare function Insert(int k, int v) int hash_v = HashFunc(k) if (ht[hash_v
-
単一リンクリストを使用してチェーンするハッシュテーブルを実装するC++プログラム
ハッシュテーブルは、キーと値のペアを格納するために使用されるデータ構造です。ハッシュ関数は、要素が挿入または検索される配列へのインデックスを計算するためにハッシュテーブルによって使用されます。 これは、単一リンクリストを使用してチェーンするハッシュテーブルを実装するためのC++プログラムです。 アルゴリズム 挿入の場合: Begin Declare Function Insert(int k, int v) int hash_v = HashFunc(k) HashTableEn
-
ダブルハッシュを使用してハッシュテーブルを実装するC++プログラム
ハッシュテーブルは、キーと値のペアを格納するために使用されるデータ構造です。ハッシュ関数は、要素が挿入または検索される配列へのインデックスを計算するためにハッシュテーブルによって使用されます。 ダブルハッシュは、オープンアドレスハッシュテーブルの衝突解決手法です。ダブルハッシュは、衝突が発生したときに2番目のハッシュ関数を使用してキーを設定するという考え方を使用しています。 これは、ダブルハッシュを使用してハッシュテーブルチェーンを実装するためのC++プログラムです。 アルゴリズム キーを検索するには: Begin Declare Function Searc
-
ローリングハッシュを実装するC++プログラム
ローリングハッシュは、入力を移動するウィンドウで入力がハッシュされるハッシュ関数です。 Rabin-Karpは、ローリングハッシュの一般的なアプリケーションです。ラビンとカープによって提案されたローリングハッシュ関数は整数値を計算します。文字列の場合、整数値は文字列の数値です。 ラビン-カープ文字列検索アルゴリズムは、乗算と加算のみを使用する非常に単純なローリングハッシュ関数を使用して説明されることがよくあります- H=c1ak-1+c2ak-2+….+ cka0. ここで、aは定数、c 1 、c 2 ….ck 入力文字です。 Hの巨大な値を操作するために、mod
-
線形プロービングでハッシュテーブルを実装するC++プログラム
ハッシュテーブルは、キーと値のペアを格納するために使用されるデータ構造です。ハッシュ関数は、要素が挿入または検索される配列へのインデックスを計算するためにハッシュテーブルによって使用されます。 線形プロービングは、オープンアドレスハッシュテーブルの衝突解決手法です。この方法では、ハッシュテーブルの各セルに単一のキーと値のペアが格納されます。別のキーによってすでに占有されているハッシュテーブルのセルに新しいキーをマッピングすることによって衝突が発生した場合。このメソッドは、テーブルで次の最も近い空き場所を検索し、そこに新しいキーを挿入します。 これは、線形プロービングを使用してハッシュテーブ
-
C++の変換演算子
この記事では、C++の変換演算子とは何かを説明します。 C++はオブジェクト指向設計をサポートしています。したがって、いくつかの実世界のオブジェクトのクラスを具象型として作成できます。 場合によっては、いくつかの具象型オブジェクトを他の型オブジェクトまたはいくつかのプリミティブデータ型に変換する必要があります。この変換を行うには、変換演算子を使用できます。これは、クラスの演算子オーバーロード関数のように作成されます。 この例では、複素数のクラスを取得しています。実数と虚数の2つの引数があります。このクラスのオブジェクトをいくつかのdouble型データに割り当てると、変換演算子を使用してその
-
C++での新しい演算子の配置
このセクションでは、C++での配置の新しい演算子について説明します。この新しい配置は、新しい演算子の別のバリエーションです。通常のnew演算子は2つのことを実行します。メモリを割り当ててから、割り当てられたメモリにオブジェクトを作成します。 新しい演算子は、ヒープセクションにメモリを割り当て、そこでオブジェクトを作成します。ただし、配置の新しい演算子の場合は、指定されたアドレスにオブジェクトを作成します。メモリの割り当てを解除するには、削除を使用できます new演算子を使用してメモリが割り当てられている場合はキーワード。ただし、新しい配置の場合 プレースメントの削除はありません 機能。 つ
-
C ++の「新しい配置」にはどのような用途がありますか?
このセクションでは、C++での配置の新しい演算子について説明します。この新しい配置は、新しい演算子の別のバリエーションです。通常のnew演算子は2つのことを実行します。メモリを割り当ててから、割り当てられたメモリにオブジェクトを作成します。 新しい演算子は、ヒープセクションにメモリを割り当て、そこでオブジェクトを作成します。ただし、配置の新しい演算子の場合は、指定されたアドレスにオブジェクトを作成します。新しい演算子を使用してメモリが割り当てられている場合は、メモリの割り当てを解除するためにdeleteキーワードを使用できます。ただし、新規配置の場合、配置削除機能はありません。 つまり、一
-
ヒープオーバーフローとスタックオーバーフロー
ヒープオーバーフロー ヒープは、動的変数を格納するために使用されます。これは、プロセスのメモリの領域です。 malloc()、calloc()、resize()これらの組み込み関数はすべて、通常、動的変数を格納するために使用されます。 ヒープオーバーフローは、-のときに発生します A)動的に多数の変数を割り当てる場合- int main() { float *ptr = (int *)malloc(sizeof(float)*1000000.0)); } B)メモリを継続的に割り当て、使用後に解放しない場合。 int main() {  
-
C++での可変数の引数
場合によっては、事前定義された数のパラメーターの代わりに、可変数の引数、つまりパラメーターを受け取ることができる関数が必要な状況に遭遇することがあります。 C / C ++プログラミング言語はこの状況の解決策を提供し、要件に基づいて可変数のパラメーターを受け入れることができる関数を定義することができます。次の例は、そのような関数の定義を示しています。 int func(int, ... ) { . . . } int main() { func(1, 2, 3); func(1, 2, 3, 4); } 関数func()の最後の引数は楕円、つまり3つのドット(.
-
二次プロービングでハッシュテーブルを実装するC++プログラム
ハッシュテーブルは、キーと値のペアを格納するために使用されるデータ構造です。ハッシュ関数は、要素が挿入または検索される配列へのインデックスを計算するためにハッシュテーブルによって使用されます。二次プロービングは、オープンアドレスハッシュテーブルの衝突解決手法です。元のハッシュインデックスを取得し、空きスロットが見つかるまで任意の2次多項式の連続する値を追加することで動作します。 これは、2次プロービングを使用してハッシュテーブルを実装するためのC++プログラムです。 アルゴリズム キー値を検索する場合: Begin Declare function Search
-
C++コンストラクターからの例外のスロー
これは、C++コンストラクターから例外をスローする簡単な例です アルゴリズム クラスの説明と擬似コード: Begin Declare a class sample1. Declare a constructor of sample1. Print “Construct an Object of sample1” Declare a destructor of sample1.
-
C++でのオープンアドレッシング線形プロービングによる独自のハッシュテーブルの実装
ハッシュテーブルは、キーと値のペアを格納するために使用されるデータ構造です。ハッシュ関数は、要素が挿入または検索される配列へのインデックスを計算するためにハッシュテーブルによって使用されます。 線形プロービングは、オープンアドレスハッシュテーブルの衝突解決手法です。この方法では、ハッシュテーブルの各セルに単一のキーと値のペアが格納されます。別のキーによってすでに占有されているハッシュテーブルのセルに新しいキーをマッピングすることによって衝突が発生した場合。このメソッドは、テーブルで次の最も近い空き場所を検索し、そこに新しいキーを挿入します。 これは、線形プロービングを使用してハッシュテーブ
-
C++での++*p、* p ++、*++pの違い
このセクションでは、C++の*ptr ++、* ++ ptr、および++*ptrの違いを確認します。 ここでは、CまたはC++でのpostfix++とprefix++の優先順位を確認します。接頭辞++または--の優先順位は、間接参照演算子「*」よりも優先され、接尾辞++または-は、接頭辞++および間接参照演算子「*」の両方よりも優先されます。 ptrがポインタの場合、* ptr ++は*(ptr ++)を示し、++ * prtは++(* ptr)を示します。 サンプルコード #include<iostream> using namespace std; int main() {
-
AVLツリーを実装するためのC++プログラム
AVLツリーは自己平衡二分探索木であり、左右のサブツリーの高さの差がすべてのノードで複数になることはありません。 ツリーの回転は、AVLツリーの要素の順序を妨げることなく構造を変更する操作です。ツリー内で1つのノードを上に移動し、1つのノードを下に移動します。これは、ツリーの形状を変更したり、小さいサブツリーを下に移動したり、大きいサブツリーを上に移動したりして高さを低くしたりするために使用され、多くのツリー操作のパフォーマンスが向上します。回転の方向は、木のノードが移動する側に依存しますが、他の人は、どの子がルートの場所をとるかに依存すると言います。これは、AVLツリーを実装するためのC+
-
C++のインライン仮想関数
C ++の仮想関数は、派生クラスオブジェクトの種類を知らなくても、基本クラスポインターのリストを作成し、任意の派生クラスのメソッドを呼び出すために使用します。仮想関数は、実行時に遅く解決されます。 仮想関数の主な用途は、ランタイムポリモーフィズムを実現することです。インライン関数は、コードの効率を高めるために使用されます。インライン関数のコードは、インライン関数が呼び出されるたびに、コンパイル時のインライン関数呼び出しの時点で置き換えられます。 基本クラスの参照またはポインターを使用して仮想関数を呼び出す場合は常にインライン化できませんが、コンパイラーはコンパイル時にオブジェクトの正確なク
-
C++の純粋な仮想デストラクタ
純粋な仮想デストラクタはC++で可能です。クラスに純粋な仮想デストラクタが含まれている場合は、純粋な仮想デストラクタの関数本体を提供する必要があります。 サンプルコード #include <iostream> using namespace std; class B { public: virtual ~B()=0; // Pure virtual destructor }; B::~B() { std::cout << "Pure virtual destructor is c
-
C++での仮想関数と純粋仮想関数の違い
次の表に、仮想機能と純粋仮想機能の違いを示します。 仮想関数 純粋仮想関数 仮想関数の定義はクラスにあります。 純粋仮想関数には定義がありません。 宣言:virtual funct_name(parameter_list){。 。 。 。 。}; 宣言:virtual funct_name(parameter_list)=0; 派生クラスの概念はありません。 クラスに少なくとも1つの純粋仮想関数が含まれている場合、そのクラスは抽象として宣言されます。 必要に応じて、基本クラスは仮想関数をオーバーライドできます。 純粋仮想関数の場合、
-
C++のコンストラクター内で仮想関数を呼び出す
コンストラクタまたはデストラクタから呼び出す仮想関数は危険であり、呼び出す仮想関数は派生クラスからではなく基本クラスから呼び出されるため、可能な限り避ける必要があります。 その理由は、C ++では、スーパークラスは派生クラスの前に構築されるためです。したがって、次の例では、Dがインスタンス化される前に、Bがインスタンス化される必要があるためです。 Bのコンストラクターが呼び出されたとき、それはまだDではないため、仮想関数テーブルにはBのs()のコピーのエントリがまだあります。 サンプルコード #include<iostream> using namespace std; clas
-
C ++仮想関数にデフォルトのパラメーターを設定できますか?
はい、C++仮想関数はデフォルトのパラメータを持つことができます。 サンプルコード #include<iostream> using namespace std; class B { public: virtual void s(int a = 0) { cout<<" In Base \n"; } }; class D: public B { p