C++のvectorとは?仕組みと主要なメンバ関数の使い方を実行例つきで解説
C++のvector(ベクトル)とは
C++のstd::vectorは、いわば「賢い配列」です。要素の挿入や削除が行われるたびに、動的配列として自動的にサイズを伸縮でき、内部の記憶域(メモリ)の管理までもコンテナ側が引き受けてくれます。そのため、開発者はメモリの確保や解放を意識することなく、C++で最も広く使われるコンテナとして活用できます。
vectorの要素は連続したメモリ領域に配置されます。この特徴により、インデックスを使ったランダムアクセスが高速であるだけでなく、イテレータを使った順次アクセス(走査)にも対応しています。さらに、データの挿入・削除は、先頭・中間・末尾のいずれの位置に対しても可能です。
この記事では、vectorの主要なメンバ関数をひと通り試せる、メニュー形式のサンプルプログラムを紹介します。
本記事で登場するvectorの主な関数
size()… 現在格納されている要素数を取得するpush_back()… 末尾に新しい要素を追加するpop_back()… 末尾の要素を削除するresize()… 要素数を指定したサイズに変更するreserve()… 指定した分の容量を事前に確保するcapacity()… 現在实际に確保されている容量を取得するclear()… 全要素を削除してvectorを空にする
アルゴリズム
開始
vector型の変数 v を宣言する
vector型のイテレータ it を宣言する
整数型の変数 c(選択)と i(挿入値)を宣言する
while (1) で無限ループ:
メニューを表示する
1.vectorのサイズを表示
2.vectorへ要素を挿入
3.vectorの末尾要素を削除
4.vectorをリサイズ
5.vectorの容量を予約
6.vectorの容量を表示
7.イテレータで表示
8.vectorをクリア
9.終了
選択値 c を入力する
switch(c) により分岐する
ケース1:size() を呼び出してvectorのサイズを表示する
ケース2:挿入する値 i を入力し、push_back() でvectorに追加する
ケース3:pop_back() を呼び出して末尾の要素を削除する
ケース4:resize() を呼び出してvectorのサイズを変更する
ケース5:reserve() を呼び出して容量を確保する
ケース6:capacity() を呼び出してvectorの容量を表示する
ケース7:it = v.begin() から it != v.end() までループし、各要素を表示する
ケース8:clear() を呼び出してvectorを空にし、「Vector Cleared」と表示する
ケース9:exit() を呼び出してプログラムを終了する
デフォルト:「Wrong Choice(無効な選択)」と表示する
終了
サンプルコード
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v; // int型を格納するvector
vector<int>::iterator it; // vector用のイテレータ
int c, i;
while (1) {
cout<<"1.Size of the Vector"<<endl;
cout<<"2.Insert Element into the Vector"<<endl;
cout<<"3.Delete Last Element of the Vector"<<endl;
cout<<"4.Resize the vector"<<endl;
cout<<"5.Reserve vector"<<endl;
cout<<"6.Display the capacity of vector"<<endl;
cout<<"7.Display by Iterator"<<endl;
cout<<"8.Clear the Vector"<<endl;
cout<<"9.Exit"<<endl;
cout<<"Enter your Choice: ";
cin>>c;
switch(c) {
case 1:
cout<<"Size of Vector: ";
cout<<v.size()<<endl;
break;
case 2:
cout<<"Enter value to be inserted: ";
cin>>i;
v.push_back(i);
break;
case 3:
cout<<"Delete Last Element Inserted:"<<endl;
v.pop_back();
break;
case 4:
cout<<"Resize the vector elements:"<<endl;
v.resize(10);
break;
case 5:
cout<<"Reserve the vector elements:"<<endl;
v.reserve(100);
break;
case 6:
cout<<"Displaying capacity of vector: ";
cout<<v.capacity()<<endl;
break;
case 7:
cout<<"Displaying Vector by Iterator: ";
for (it = v.begin(); it != v.end(); it++) {
cout<<*it<<" ";
}
cout<<endl;
break;
case 8:
v.clear();
cout<<"Vector Cleared"<<endl;
break;
case 9:
exit(1);
break;
default:
cout<<"Wrong Choice"<<endl;
}
}
return 0;
}
実行結果
プログラムを実行すると、次のようなメニューが繰り返し表示され、番号を入力して各操作を行います。
1.Size of the Vector 2.Insert Element into the Vector 3.Delete Last Element of the Vector 4.Resize the vector 5.Reserve vector 6.Display the capacity of vector 7.Display by Iterator 8.Clear the Vector 9.Exit Enter your Choice:
動作例
- 最初に「1」を選ぶと、まだ何も追加していないため Size of Vector: 0 と表示されます。
- 続けて「2」を選び、値 1, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12 の12個を順に追加します。
- 再び「1」でサイズを確認すると、Size of Vector: 12 になります。
Enter your Choice: 1 Size of Vector: 12 Enter your Choice: 7 Displaying Vector by Iterator: 1 3 2 4 5 6 7 8 9 10 11 12
- 「4」を選ぶと
resize(10)が実行され、要素数が12から10に縮小されます。 - 「3」を選ぶと
pop_back()によって末尾の要素が1つ削除されます。
Enter your Choice: 4 Resize the vector elements: Enter your Choice: 7 Displaying Vector by Iterator: 1 3 2 4 5 6 7 8 9 10 Enter your Choice: 3 Delete Last Element Inserted: Enter your Choice: 7 Displaying Vector by Iterator: 1 3 2 4 5 6 7 8 9
- 「8」を選ぶと
clear()が実行され、全要素が削除されてvectorが空になります。 - 最後に「9」を選ぶと、プログラムが終了します。
Enter your Choice: 8 Vector Cleared Enter your Choice: 9
まとめ
vectorは「サイズの自動管理」「連続メモリによる高速なアクセス」「豊富なメンバ関数」という3つの特徴を持つ、C++プログラミングの基礎となるコンテナです。push_back や pop_back による末尾操作は非常に高速で、resize や reserve を組み合わせれば、柔軟かつ効率的にメモリを扱うことができます。これらの関数を使い分けられるようになると、より安全で読みやすいC++のコードが書けるようになります。
-
【初心者向け】C++の例外処理の仕組みを徹底解説!try・catch・throwの基本から独自例外の作成まで
C++における例外処理(Exception Handling)とは、プログラムの実行中に発生するエラー(ランタイムエラー)を適切に処理するための仕組みです。例外とは、実行時に送出されるイベントのことを指し、C++ではすべての標準例外が std::exception クラスを基底クラスとして定義されています。 もし例外を捕捉しなければ、プログラムは例外メッセージを出力した後に異常終了してしまいます。例外はハンドリング可能なランタイムエラーであり、適切に処理することでプログラムの堅牢性を大きく向上させることができます。 標準例外クラスの階層構造 C++標準では、例外は <exception&
-
Snapchatの仕組みとは?基本用語から使い方まで初心者向けに徹底解説
モバイルメッセージアプリの世界に革命をもたらしたと言えば、それはSnapchat(スナップチャット)についての言葉として決して大げさではありません。Snapchatが登場する以前、友達とこんなユニークな方法でコミュニケーションができると想像した人はほとんどいませんでした。送った画像や動画が自動的に消えるという「自己消滅型メッセージ」という独自のコンセプトにより、Snapchatは従来のメッセージアプリやSNSとは一線を画す存在となっています。2011年の登場以来、Snapchatは1日あたり1億8000万人以上のアクティブユーザーを抱える、世界で最も人気のあるアプリの一つへと成長しました。また