1. 導入:なぜ std::vector が重要なのか?
C++でプログラミングを始めると、最初にぶつかる壁が「配列のサイズをどうするか」という問題です。C言語由来の固定配列は、事前にサイズを決める必要があり、データ量が増えると対応できません。そんな課題を解決してくれるのが std::vector です。要素の追加や削除に合わせて自動的にメモリを管理してくれるため、現代のC++開発において最も頻繁に使われる標準コンテナです。
2. 基礎知識:std::vector とは何か?
std::vector とは、一言で言えば「要素の数に応じてサイズが自動的に変化する配列」です。
特徴として、メモリがメモリ上で「連続」して並んでいることが挙げられます。これにより、配列のようにインデックス(添字)を使って高速にデータへアクセスできます。また、データの末尾に対する追加処理が非常に高速であることも、多くのエンジニアに愛用される理由です。
3. 実装/解決策:基本的な使い方
std::vector を使うには、ヘッダーファイル
主な操作として「要素の追加(push_back)」「要素の参照」「サイズの取得(size)」を覚えれば、ほとんどのケースに対応可能です。
4. サンプルプログラム
以下のコードをコピーして、コンパイル・実行してみてください。
include <iostream>
include <vector> // vectorを使うために必要
int main() {
// 1. std::vectorの宣言と初期化
std::vector<int> numbers = {10, 20, 30};
// 2. 末尾への要素追加
numbers.push_back(40);
// 3. 要素へのアクセスとサイズの取得
std::cout << "現在の要素数: " << numbers.size() << std::endl;
// 範囲ベースforループで全要素を表示
std::cout << "要素一覧: ";
for (int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
// 4. インデックスを指定してアクセス
std::cout << "2番目の要素は: " << numbers[1] << std::endl;
return 0;
}
5. 応用・注意点:現場で役立つポイント
・メモリの再確保に注意
std::vector は要素を追加した際、メモリがいっぱいになると、より大きなメモリ領域を確保し直し、そこにデータをコピーするという処理が走ります。データ数が膨大になることが予測される場合は、reserve() 関数を使ってあらかじめメモリを確保しておくことで、パフォーマンスを向上させることができます。
・範囲外アクセスに注意
[ ] 演算子を使ったアクセスは非常に高速ですが、範囲外のインデックスを指定してもエラーチェックが行われません。安全性を重視する場合は、at() メンバ関数を使うことで、範囲外アクセスの際に例外を投げさせることが可能です。
まずは std::vector を使いこなして、柔軟なデータ管理をマスターしましょう!

コメント