ベクトル内 C++ 標準テンプレートライブラリ (STL) と例

⚡ スマートサマリー

ベクトル内 C++ これは、標準テンプレートライブラリの動的配列であり、要素の追加や削除に応じて自動的にサイズが変更され、項目が連続したメモリに格納されるため、プログラマはイテレータを使用してそれらにアクセスしたり、走査したりできます。

  • 📦 動的配列: A C++ ベクトルは、固定サイズの静的配列とは異なり、自動的に拡大縮小します。
  • 🧩 ヘッダーと構文: ベクターヘッダーを含め、ベクターを宣言します。型付き要素を格納するための名前。
  • 🧭 イテレータ: begin()、end()、cbegin()、cend() は、ポインタのようにベクター要素間を移動します。
  • 🛠️ 修飾子: push_back()、insert()、pop_back()、erase()、clear()はベクターの内容を変更します。
  • 📐 容量: size()、capacity()、max_size()、resize()、empty() は、ストレージ容量を報告または調整します。
  • 🤖 AI支援: GitHub Copilotや同様のAIアシスタントは、短いコメントからベクトル演算を組み立てます。

C++ ベクターSTL

何が C++ ベクター?

A C++ ベクターは自動的にサイズを変更できる動的配列です。サイズ変更は、ベクターに要素が追加または削除された後に行われます。ストレージはコンテナによって自動的に処理されます。ベクターの要素は連続したストレージに格納されます。これにより、 C++ プログラマーはイテレータを使用してベクトル要素にアクセスし、走査することができます。

ベクトルへの新しいデータの挿入は、ベクトルの末尾で行われます。これには微分時間がかかります。ベクトルから要素を削除するには定数時間が必要です。これは、ベクトルのサイズを変更する必要がないためです。ベクトルの先頭への要素の挿入または削除には線形時間が必要です。

ベクトルを使ったコードを書く前に、ベクトルが適切なコンテナとなるのはどのような場合かを知っておくと役立ちます。

ベクターをいつ使用するか?

A C++ ベクトルは次の状況で使用する必要があります。

  • 一貫して変化するデータ要素を扱う場合。
  • データのサイズが事前に不明な場合、ベクターではコンテナの最大サイズを設定する必要はありません。

ベクトルを初期化する方法 C++

ベクトルの構文 C++ 次のとおりです。

vector <data-type> name (items)

上に示したように、ベクトル キーワードから始めます。

  • その データ・タイプ これは、ベクトルに格納される要素のデータ型です。
  • その これはベクトルまたはデータ要素の名前です。
  • その リーディングシート ベクトルデータの要素数を表します。このパラメータは省略可能です。

ベクトルが存在すると、イテレータはポインタのような方法でその要素間を移動することを可能にします。

イテレータ

イテレータの目的は、ベクターに格納されている要素にアクセスできるようにすることです。これはポインタのように機能するオブジェクトです。以下は、サポートされている一般的なイテレータです。 C++ ベクトル:

  • vector::begin(): ベクトルの最初の要素を指す反復子を与えます。
  • vector::end(): これは、ベクトルの最後の要素を指す反復子を与えます。
  • ベクトル::cbegin(): これは vector::begin() と同じですが、要素を変更する機能はありません。
  • ベクトル::cend(): これは vector::end() と同じですが、ベクターの要素を変更することはできません。

次の例では、ベクトルにデータを入力し、可変イテレータと定数イテレータの両方を使用してベクトルを走査します。

#include <iostream> 
#include <vector> 

using namespace std;
int main()
{
	vector<int> nums;

	for (int a = 1; a <= 5; a++)

		nums.push_back(a);

	cout << "Output from begin and end: ";

	for (auto a = nums.begin(); a != nums.end(); ++a)

		cout << *a << " ";

	cout << "\nOutput from cbegin and cend: ";

	for (auto a = nums.cbegin(); a != nums.cend(); ++a)

		cout << *a << " ";

	return 0;
}

出力:

C++ ベクトルイテレータの例1の出力

コードのスクリーンショットは次のとおりです。

C++ ベクトルイテレータの例1のコード

Code 説明:

  1. iostream ヘッダー ファイルをコードに含めます。 これにより、コンソールからの読み取りとコンソールへの書き込みが可能になります。
  2. コードにベクトルヘッダーファイルをインクルードします。これにより、ベクトルを操作できるようになります。 C++.
  3. std 名前空間を含めると、呼び出さずにそのクラスと関数を使用できます。
  4. main() 関数を呼び出し、その中にプログラムのロジックを追加します。
  5. { は、main() 関数の本体の開始を示します。
  6. 一連の整数を格納するために、nums という名前のベクトルを宣言します。
  7. ベクトルを反復処理するために、forループを作成します。変数を使用することで、ベクトルの要素を1番目から5番目まで反復処理できます。
  8. 要素を後ろからベクトル num にプッシュします。 反復ごとに、変数 a の現在の値 (1 ~ 5) がベクトルに追加されます。
  9. コンソールにテキストを出力します。
  10. 反復子変数 a を使用して、ベクトル nums の要素を先頭から最後の要素まで反復します。 Vector::begin() および Vector::end() イテレータを使用していることに注意してください。
  11. 反復子変数 a が指す値を反復ごとにコンソールに出力します。
  12. コンソールにテキストを出力します。 \n は改行文字で、カーソルを新しい行に移動してそこから印刷します。
  13. イテレータ変数を使用して、ベクトル nums の要素を先頭から末尾の要素まで順に走査します。ここでは、vector::cbegin() と vector::cend() イテレータを使用していることに注意してください。
  14. 反復子変数 a が指す値を反復ごとにコンソールに出力します。
  15. プログラムが正常に実行された場合、main 関数は値を返す必要があります。
  16. main() 関数の本体の終わり。

修飾子

修飾子は、指定されたデータ型の意味を変更するために使用されます。 C++:

  • ベクトル::push_back(): このモディファイアは要素を後ろから押します。
  • ベクトル::挿入(): ベクターの指定された位置に新しい項目を挿入します。
  • ベクトル::ポップバック(): このモディファイアは、後ろからベクトル要素を削除します。
  • ベクトル::消去(): これは、指定された場所から要素の範囲を削除するために使用されます。
  • ベクトル::クリア(): すべてのベクトル要素が削除されます。

次の例では、これらの修飾子を順番に適用して、ベクトルがどのように変化するかを確認します。

#include <iostream>
#include <vector> 

using namespace std;
int main()
{
	vector<int> nums;
	
	nums.assign(5, 1);

	cout << "Vector contents: ";
	for (int a = 0; a < nums.size(); a++)
		cout << nums[a] << " ";

	nums.push_back(2);
	int n = nums.size();
	cout << "\nLast element: " << nums[n - 1];

	nums.pop_back();

	cout << "\nVector contents: ";
	for (int a = 0; a < nums.size(); a++)
		cout << nums[a] << " ";

	nums.insert(nums.begin(), 7);

	cout << "\nFirst element: " << nums[0];
	
	nums.clear();
	cout << "\nSize after clear(): " << nums.size();			
}

出力:

C++ ベクトル修飾子の例2の出力

コードのスクリーンショットは次のとおりです。

C++ ベクトル修飾子の例2のコード

Code 説明:

  1. その関数を使用するには、コードに iostream ヘッダー ファイルを含めます。
  2. その関数を使用するには、コードにベクター ヘッダー ファイルを含めます。
  3. std 名前空間を含めると、呼び出さずにそのクラスを使用できます。
  4. main() 関数を呼び出します。 プログラム ロジックは本体内に追加する必要があります。
  5. main() 関数の本体の開始。
  6. いくつかの整数値を格納するために、nums という名前のベクトルを宣言します。
  7. ベクトル nums に 5 つの要素を格納します。 それぞれの値は 1 です。
  8. コンソールにテキストを出力します。
  9. 反復変数 a を使用して、ベクトル nums の要素を反復処理します。
  10. 反復ごとにベクトル num の値をコンソールに出力します。
  11. 値 2 をベクトル nums の末尾に追加します。
  12. ベクトル nums のサイズを格納する整数変数 n を宣言します。
  13. ベクトル nums の最後の値を他のテキストと並べて出力します。 2 が返されるはずです。
  14. ベクトル nums から最後の要素を削除します。 2は削除されます。
  15. コンソールにテキストを出力します。 \n はカーソルを新しい行に移動し、そこにテキストを印刷します。
  16. 反復変数 a を使用して、ベクトル nums の要素を反復処理します。
  17. 反復ごとにベクトル num の値をコンソールに出力します。
  18. 値 7 をベクトル nums の先頭に挿入します。
  19. ベクトル nums の最初の値を他のテキストと並べて出力します。 7 が返されるはずです。
  20. ベクトル nums からすべての要素を削除します。
  21. すべての内容をクリアした後、ベクトル num のサイズを他のテキストと並べて出力します。 0 が返されるはずです。
  22. main() 関数の本体の終わり。

容量

以下を使用してください 機能 ベクトルの容量を決定するには:

  • サイズ() – ベクトル内の要素数を返します。
  • Max_size() – ベクトルに格納できる最大の項目数を返します。
  • 容量() – ベクトルに割り当てられたストレージ容量を返します。
  • リサイズ() – コンテナのサイズをn個のアイテムを含むように変更します。ベクターの現在のサイズがnより大きい場合、ベクターの末尾のアイテムが削除されます。ベクターの現在のサイズがnより小さい場合、ベクターの末尾にアイテムが追加されます。
  • 空の() ベクトルが空の場合はtrueを返し、そうでない場合はfalseを返します。

この最後の例では、上記の容量関数を使用してベクトルの格納量を報告および調整します。

#include <iostream> 
#include <vector> 
using namespace std;
int main() {
	vector<int> vector1;
	for (int x = 1; x <= 10; x++)
		vector1.push_back(x);
	cout << "Vector size: " << vector1.size()<< endl;
	cout << "Vector capacity: " << vector1.capacity() << endl;
	cout << "Maximum size of vector: " << vector1.max_size()<< endl;
	vector1.resize(5);
	cout << "Vector size after resizing: " << vector1.size() << endl;
	if (vector1.empty() == false)
		cout << "Vector is not empty"<<endl;
	else
		cout << "Vector is empty"<<endl;
	return 0;
}

出力:

C++ ベクトル容量 例3の出力

コードのスクリーンショットは次のとおりです。

C++ ベクトル容量の例3コード

Code 説明:

  1. その機能を使用するには、コードに iostream ヘッダー ファイルを含めます。
  2. その関数を使用するには、コードにベクター ヘッダー ファイルを含めます。
  3. std 名前空間をコードに含めると、そのクラスを呼び出さずに使用できます。
  4. main() 関数を呼び出します。 プログラム ロジックは、この関数の本体内に追加する必要があります。
  5. 整数を格納するために、vector1 という名前のベクトルを作成します。
  6. for ループを使用して、1 ~ 10 の値を持つ変数 x を作成します。
  7. 変数 x の値をベクトルにプッシュします。
  8. ベクトルのサイズを他のテキストと一緒にコンソールに表示します。
  9. ベクトルの容量を他のテキストと一緒にコンソールに表示します。
  10. ベクトルがコンソール上の他のテキストと一緒に保持できる項目の最大数を出力します。
  11. 5 つの要素だけを保持できるようにベクトルのサイズを変更します。
  12. ベクトルの新しいサイズを他のテキストと並べて印刷します。
  13. ベクトルが空でないかどうかを確認します。
  14. ベクトルが空でない場合は、コンソールにテキストを出力します。
  15. else ステートメントを使用して、ベクトルが空の場合に何を行うかを指定します。
  16. ベクトルが空の場合にコンソールに印刷するテキスト。
  17. プログラムは正常に完了すると値を返す必要があります。
  18. main() 関数本体の終わり。

よくあるご質問

ベクトルは、自動的にサイズが変更され、自身のサイズを把握している動的配列です。一方、組み込み配列はコンパイル時に固定長が設定されます。ベクトルはメモリ管理を自動的に行いますが、生の配列はそうではありません。

高速な直接アクセスには、nums[0] のような添え字演算子を使用してください。nums.at(0) のような at() メンバ関数も同様の動作をしますが、インデックスが無効な場合は out_of_range 例外をスローするため、より安全です。

要素自体がベクトルであるベクトルを宣言します。たとえば、vector グリッド。コンストラクタまたはpush_back行を使用してサイズを指定できます。各内部ベクトルは独立して拡張できるため、柔軟でサイズ変更可能な行列を作成できます。

ベクトルは連続したメモリ領域に要素を格納し、高速なランダムアクセスを可能にします。一方、std::listは双方向リンクリストであり、任意の場所に高速な挿入や削除が可能ですが、直接的なインデックス付けはできません。アクセスパターンに応じてどちらを使用するかを選択してください。

アルゴリズムヘッダーを含め、開始イテレータと終了イテレータを指定して std::sort を呼び出します。例: sort(nums.begin(), nums.end())。デフォルトでは昇順でソートされます。カスタム比較器またはそれ以上の値を渡してください。 ()降順でソートします。

はい。ベクターはテンプレートであり、文字列、カスタムクラス、さらには他のベクターなど、あらゆる型を保持できます。要素の型は山括弧内に宣言します。例: vectorまたはベクター。

はい。AIコーディングアシスタントは、短いプロンプトやコメントを、宣言、プッシュバックループ、反復処理などを含む動作するベクトルコードに変換します。AIはプロジェクト固有の要件を見落とす可能性があるため、提案された型、境界、容量処理については必ず確認してください。

Yes. GitHubコパイロット 入力と同時に、ベクター宣言、push_backとinsertの呼び出し、イテレータループなどを提案してくれます。繰り返し発生する定型コードの処理には優れていますが、コンパイル前にインデックス、サイズ変更、ロジックを検証する必要があります。