vectors stl
例を使用したSTLでのベクトルの役割。
これまでのところ、このC ++シリーズでは、固定サイズの静的配列を見てきました。
プログラムの途中でさらに多くの要素を配列に格納する必要がある場合、それは不可能になり、配列の制限を超えて要素を格納しようとすると、必ず「out_of_bound」例外が発生します。
これに対する1つの解決策は、実行時にさらに多くの要素を格納する際に問題が発生しないように、最大容量で配列を宣言することです。しかし、この配置には深刻な欠点があります。つまり、メモリを浪費しすぎています。
=> ここで完全なC ++トレーニングシリーズを確認してください。
これらすべての問題に対する答えは、必要に応じて自動的に拡張される動的配列を使用することです。 STLは、この動的配列をベクトルコンテナの形式で提供します。
学習内容:
- ベクトルをどのように定義しますか?
- std :: Vectorクラスを使用したC ++でのベクトルの宣言
- ベクトルを初期化する
- ベクトルイテレータ
- ベクトル関数
- ベクトル容量
- ベクトル修飾子
- 2Dベクトル
- ベクトルの例
- 結論
- 推奨読書
ベクトルをどのように定義しますか?
ベクトルは、要素が挿入または削除されたときに自動的にサイズを変更する動的配列コンテナです。ベクトルの保存は、ベクトルコンテナ自体によって処理されます。
ベクトル内の要素は、連続した場所に格納されます。配列と同様に、ベクトル要素もイテレーターを使用してトラバースおよびアクセスできます。
std :: Vectorクラスを使用したC ++でのベクトルの宣言
STLベクトルクラス ‘ std :: vector ’はヘッダーの下に定義されています。したがって、ベクターコンテナを使用するには、以下に示すように、このヘッダーをプログラムに含める必要があります。
#include
以下に示すように、空のベクトルを宣言できます。
std::vector myvec;
上記のコード行は、整数型の要素を持つベクトルを作成します。メモリ内では、これはmyvecとしてレイアウトされます。
ベクトルを初期化する
ベクトルは、宣言時に値で初期化できます。
Mac用の最高のDVDリッピングソフトウェア
これは次のように行われます。
#include int main() { std::vector myvec = {1, 1, 2, 3, 5}; }
上記のコードでは、フィボナッチ数列の最初の5つの要素を含むmyvecという名前のint型のベクトルを宣言します。
このベクトルのメモリレイアウトは次のようになります。
ベクトルイテレータ
すでに述べたように、イテレータを使用してベクトルを順番にトラバースします。
ベクトルは、要素をステップスルーするために次のイテレータ関数をサポートしています。
- ベギン() - ベクトルコンテナの最初の要素を指すイテレータを返します。
- 終わり() - ベクトルの最後の要素に続く要素を指すイテレータを返します。
- rbegin()– ベクトルコンテナの最後の要素を指す逆イテレータを返します。
- レンダリング()- ベクトルコンテナの最初の要素を指す逆イテレータを返します。
- cbegin()- ベクトルコンテナの最初の要素を指す定数イテレータを返します。
- いくつか()- ベクトルコンテナの最後の要素に続く要素を指す定数イテレータを返します。
- crbegin()– ベクトルコンテナの最後の要素を指す逆定数イテレータを返します。
- crend()– ベクトルコンテナの最初の要素を指す逆定数イテレータを返します。
これらのイテレータ関数を示す例を見てみましょう。他の機能も同様に使用できます。
#include #include using namespace std; int main() { vector v1; for (int i = 1; i <= 5; i++) v1.push_back(i+1); cout << 'Output of Vector with begin and end: '; for (auto i = v1.begin(); i != v1.end(); ++i) cout << *i << ' '; cout << '
Output of Vector with rbegin and rend: '; for (auto itr = v1.rbegin(); itr != v1.rend(); ++itr) cout << *itr << ' '; cout << '
Output Vector of with cbegin and cend: '; for (auto itc = v1.cbegin(); itc != v1.cend(); ++itc) cout << *itc << ' '; cout << '
Output Vector of with crbegin and crend : '; for (auto icr = v1.crbegin(); icr != v1.crend(); ++icr) cout << *icr << ' '; return 0; }
出力:
開始と終了のあるベクトルの出力:2 3 4 5 6
rbeginとrendを使用したベクトルの出力:6 5 4 3 2
cbeginとcendを使用したの出力ベクトル:2 3 4 5 6
crbeginとcrendを使用したの出力ベクトル:6 5 4 3 2
したがって、このコードでは、push_back関数を使用して、ベクトルを宣言し、その中に値を挿入します。次に、上記で説明した各イテレータ関数を使用してベクトルを表示します。使用するイテレータ関数に応じて出力からわかるように、ベクトルが表示される順序が変わります。
ベクトル関数
ベクトルの並べ替え
ベクトルですでに見たSTLアルゴリズムを使用できます。
以下に示すのは、ベクトルで「ソート」を使用する例です。
#include #include #include using namespace std; int main() { vector myvec = {10,50,30,20,60,40}; cout<<'Original Vector'< 出力:
元のベクトル
10 50 30 20 60 40
ソートされたベクトル
10 20 30 40 50 60
上記の例では、ベクトルを初期化してから、並べ替えアルゴリズムを適用してベクトルを並べ替えています。
ベクトルの要素を印刷する
ベクトルは、イテレータと「cout」ストリームを使用して印刷できます。イテレータを使用して、各ベクトル要素をステップスルーし、coutで出力できます。
次の例はこれを示しています。
#include #include using namespace std; int main() { vector v1; for (int i = 1; i <= 5; i++) v1.push_back(i+2); cout << 'Output of Vector with begin and end: '; for (auto i = v1.begin(); i != v1.end(); ++i) cout << *i << ' '; }
出力:
開始と終了のあるベクトルの出力:3 4 5 6 7
ベクトル容量
ベクトルに作用してそのサイズ、最大サイズなどを決定するさまざまな関数があります。
以下に機能をリストします。
(i)ベクトルのサイズ
関数size()は、ベクトルコンテナ内の要素の数を返します。これはstd :: vectorクラスの組み込み関数であり、ベクトルのサイズを見つけるために直接使用できます。
YouTubeのビデオをダウンロードするのに最適なウェブサイト
size()関数を使用したベクトルの例を見てみましょう。
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << 'Vector Size : ' << myvec.size(); return 0; }
出力:
ベクトルサイズ:6
上記のプログラムでは、6つの要素で構成されるベクトルmyvecを定義しました。次に、myvecでsize()関数を呼び出すと、正しいサイズが表示されます。
(ii)ベクトルのサイズ変更
また、「n」個の要素を保持できるように、ベクトルのサイズを目的のサイズに変更することもできます。これは、std :: vectorクラスの「resize()」関数によって実現されます。サイズ変更関数は、ベクトルのサイズをパラメーターとして受け取り、ベクトルコンテナーを指定されたサイズにサイズ変更します。
例を使ってこれを理解しましょう。
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << '
Vector elements are: '; for (auto it = myvec.begin(); it != myvec.end(); it++) cout << *it << ' '; myvec.resize(4); cout << '
Vector Size after resize: ' << myvec.size(); cout << '
Vector elements after resizing are: '; for (auto it = myvec.begin(); it != myvec.end(); it++) cout << *it << ' '; return 0; }
出力:
ベクトル要素は次のとおりです:1 1 2 3 5 8
サイズ変更後のベクトルサイズ:4
サイズ変更後のベクトル要素は次のとおりです:1 1 2 3
上記のプログラムでは、最初にサイズ6のベクトルmyvecを定義します。次に、size = 4でこのベクトルのサイズ変更関数を呼び出します。これは、ベクトルのサイズを4に変更することを意味します。
サイズ変更関数を呼び出した後、ベクトルを再度出力します。ベクトルのサイズを4に変更すると、残りの要素が破棄され、ベクトルの4つの要素のみが表示されることがわかります。
サイズとサイズ変更の関数とは別に、ベクトルクラスは、ベクトルの容量を操作できるようにするいくつかの関数もサポートしています。彼らです:
- max_size(): 最大サイズ、つまりベクトルが保持できる要素の最大数を返します。
- 容量(): 現在割り当てられているストレージスペースのサイズを返します。これは、要素の数で返されます。
- 空の(): コンテナが空かどうかを確認します。
- シュリンクトゥフィット(): サイズに合わせてベクトル容量を縮小し、他のすべての要素を破棄します。
- reserved(): n個の要素を含むようにベクトル容量を予約します。
ベクトル修飾子
修飾子は、ベクトルコンテナの内容を変更するために使用できる操作または関数です。修飾子として使用される主な関数のいくつかを見ていきます。
ベクトルへの新しい値の割り当て
std :: vectorによって提供される修飾子関数の1つは、割り当て関数です。割り当て関数は、古い値を置き換えることにより、ベクトルに新しい値を割り当てます。
これは、次の例で示されています。
#include #include using namespace std; int main() { // Assign vector vector myvec; // assign value 10 5 times myvec.assign(5, 10); cout << 'The vector elements: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; }
出力:
ベクトル要素:10 10 10 10 10
上記のコードでは、int型のベクトルを宣言しています。次に、を呼び出して、パラメーター5、10を使用して関数を割り当てます。これは、要素10をベクトルに5回割り当てることを意味します。ベクトルを表示すると、ベクトルには5つの要素があり、すべて値が5であることがわかります。
ベクトルの消去
ベクトルを変更するためにstd :: vectorによって提供される次の関数は、「消去」関数です。消去機能は、指定された範囲またはベクトルからの位置から要素を削除します。
消去関数の例を見てみましょう。
#include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5}; cout << '
Vector elements:'; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // remove the first element myvec.erase(myvec.begin()); cout<<'
Vector size after erase: '< 出力:
ベクトル要素:1 1 2 3 5
消去後のベクトルサイズ:4
消去操作後のベクトル:1 2 3 5
上記のサイズ変更機能の出力に示されているように、消去または削除する要素の範囲または位置を指定します。上記の例では、ベクトルの最初の要素を指す位置を指定しています。
ベクトルに要素を挿入する
ベクトルクラスstd :: vectorは、ベクトルに値を挿入するためのさらに別の関数を提供します。挿入関数を使用すると、指定した位置の前のベクトルに要素を挿入できます。
これは次の例で明らかになります。
#include #include using namespace std; int main() { // Assign vector vector myvec = {2,3,4}; cout << '
Initial vector: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // inserts 20 at the beginning, 30 after that myvec.insert(myvec.begin(), 20); myvec.insert(myvec.begin()+1,30); cout << '
New vector after insert: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; }
出力:
初期ベクトル:2 3 4
挿入後の新しいベクトル:20 30 2 3 4
上記のプログラムは、最初に3つの要素を持つベクトルを宣言します。次に、挿入関数を2回呼び出して、ベクトルの1番目と2番目の位置にそれぞれ値20と30を挿入します。次に、変更されたベクトルを表示します。
ベクトルコンテンツの交換
ベクトルクラスは、あるベクトルの内容を同じタイプとサイズの別のベクトルの内容と交換または交換する機能も提供します。これは、ベクトル組み込み関数「スワップ」によって実現されます。
次のコードについて考えてみます。
#include #include using namespace std; int main() { // swap operation vector v1, v2; v1.push_back(1); v1.push_back(3); v2.push_back(5); v2.push_back(7); cout << '
Vector 1: '; for (int i = 0; i < v1.size(); i++) cout << v1(i) << ' '; cout << '
Vector 2: '; for (int i = 0; i < v2.size(); i++) cout << v2(i) << ' '; // Swaps v1 and v2 v1.swap(v2); cout << '
After Swap
Vector 1: '; for (int i = 0; i < v1.size(); i++) cout << v1(i) << ' '; cout << '
Vector 2: '; for (int i = 0; i < v2.size(); i++) cout << v2(i) << ' '; }
出力:
ベクトル1:1 3
ベクトル2:5 7
交換後
ベクトル1:5 7
ベクトル2:1 3
上記のコードは、スワッピング前後の2つのベクトルの内容を示しています。
ベクトルの値をクリアする
消去関数を使用してベクトルから1つ以上の要素を削除するのとは対照的に、ベクトルコンテナ内のすべての要素を削除できる別の関数「Clear」があります。
以下のプログラムでは、ベクトルコンテナの明確な機能を示しています。
#include #include using namespace std; int main() { // swap operation vector v1; v1.push_back(1); v1.push_back(3); v1.push_back(5); v1.push_back(7); cout<<'
Size of vector v1: '< 出力:
ベクトルv1のサイズ:4
ベクトル1:1 3 5 7
clearfunctionの呼び出し後のベクトルv1のサイズ:0
ここでは、最初にベクトルを宣言してから、要素をその中にプッシュします。関数clear()を呼び出すと、ベクトル内のすべての要素が一度に削除されることがわかります。
at(pos)
この関数は、ベクター内の位置「pos」にある要素への参照を返します。
これは、ベクトル要素にアクセスするために使用される関数の1つです。
以下に例を示します。
#include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Element at position 3 : '< 出力:
位置3の要素:3
例に示すように、「at」関数を使用して、指定された位置にあるベクトル内の要素にアクセスします。
フロント
関数「front」は、ベクトルの最初の要素への参照を返します。これは、ベクトルコンテナの要素にアクセスするために使用するさらに別の関数です。
次の例は、「フロント」機能の使用法を示しています。
#include #include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();it 出力:
入力ベクトル:1 1 2 3 5 8
ベクトルの前の要素:1
バック
「front」関数と同様に、back関数はベクトルコンテナの最後の要素にアクセスするために使用されます。 「back」関数は、ベクトルコンテナの最後の要素への参照を返します。
次の例は、「戻る」関数の使用法を示しています。
#include #include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();it 出力:
入力ベクトル:1 1 2 3 5 8
ベクトルの後ろの要素:8
ベクトルで要素を見つける
関数「find」は、特定の要素(キーと呼ばれる)がベクトルに存在するかどうかを検索するために使用されます。この機能は高速で効率的であると思われます。値が見つかると、関数は戻ります。
QAでの回帰テストとは何ですか
次の例は、検索機能の使用法を示しています。
#include #include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();itkey; if(find(myvec.begin(),myvec.end(),key)!= myvec.end()) cout<<'
Element found'; else cout<<'
Element not found'; }
出力:
入力ベクトル:1 1 2 3 5 8
検索するキーを入力してください:0
要素が見つかりません
2Dベクトル
2次元ベクトルは、「VectorofVector」とも呼ばれます。 2次元配列と同様に、2次元ベクトルの要素も行列形式で配置されます。
2Dベクトルのプログラム例を以下に示します。
#include #include // for 2D vector using namespace std; int main() { // Initializing 2D vector 'odd_vect' with vector odd_vect{ { 1, 3, 5 }, { 7, 9, 11 }, { 13,15,17 } }; // Displaying the 2D vector cout<<'2D vector : '; cout< 出力:
2Dベクトル:
1 3 5
7 9 11
13 15 17
上記の例では、2Dベクトルが定義されている方法に注意してください。別のベクトル内のベクトルとして定義されます。この2Dベクトルを表示するときは、2D配列を表示するのと同じアプローチを使用します。
ベクトルの例
以下に示すのは、ほとんどのベクトル演算を含むベクトルの例です。
#include #include using namespace std; int main() { // Assign vector vector myvec; // assign value 10 5 times myvec.assign(5, 10); cout << 'The vector elements: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // push value 5 in myvec myvec.push_back(5); int n = myvec.size(); cout << '
The new vector after push_back:'; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // pop the element myvec.pop_back(); cout<<'
New vector after pop_back : '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // inserts 20 at the beginning myvec.insert(myvec.begin(), 20); cout << '
New vector after insert: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // remove the first element myvec.erase(myvec.begin()); cout<<'
Vector size after erase: '< 出力:
ベクトル要素:10 10 10 10 10
push_backの後の新しいベクトル:10 10 10 10 10 5
pop_backの後の新しいベクトル:10 10 10 10 10
挿入後の新しいベクトル:20 10 10 10 10 10
消去後のベクトルサイズ:5
最初の要素を消去した後:10 10 10 10 10
以下は同じもののスクリーンショットです。

上記の例では、ベクトルを宣言してから、assign関数とpush_back関数を使用して、ベクトルに要素を入力します。次に、関数pop_backを使用して、ベクトルの末尾から要素を削除します。その後、挿入要素を使用してベクトルに1つの要素を再度追加し、消去機能を使用して要素を消去します。
これは、さまざまな機能を示すベクターコンテナのエンドツーエンドの例です。
結論
これで、ベクトルに関するこのチュートリアルは終了です。
次のチュートリアルでは、配列やベクトルの行に似たSTLの「リスト」コンテナについて学習します。
=> ここで完璧なC ++トレーニングガイドをチェックしてください。
推奨読書