複数のデータをまとめて管理・操作するための「配列」と「ベクタ」について学びます。 配列はC言語でもおなじみですが、C++では「ベクタ(vector)」という便利な仕組みもあります。
C++標準ライブラリに用意された 可変長の配列 です。
.push_back()
で要素を動的に追加でき、.size()
で要素数を取得できます。vector<int> nums = {1, 2, 3, 4}; // これは変数名。ベクタ変数と呼びます。| 比較項目 | 配列 | ベクタ (vector) |
|---|---|---|
| サイズ | 固定 | 可変(動的に増減) |
| メモリ管理 | 手動 | 自動 |
| 初期化 | 軽量・高速 | やや重い(柔軟性あり) |
| 安全性 | 範囲外アクセスに弱い | .at() で安全にアクセス |
| 実行速度 | 高速 | 少しだけオーバーヘッドあり |
配列が向いている場面
ベクタが向いている場面
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> scores = {10, 20, 30, 40, 50};
scores.push_back(60);
for (int i = 0; i < scores.size(); i++) {
cout << scores[i] << endl;
}
return 0;
}vector<int> a; // 空のベクタ
vector<int> b(5); // 要素数5、全て0で初期化
vector<int> c(5, 10); // 要素数5、全て10で初期化
vector<int> d = {1, 2, 3}; // リスト初期化| 機能 | 書き方例 | 説明 |
|---|---|---|
| 要素の追加 | vec.push_back(値) |
末尾に要素を追加 |
| 要素数の取得 | vec.size() |
要素数を返す |
| 要素の削除(末尾) | vec.pop_back() |
最後の要素を削除 |
| 全要素削除 | vec.clear() |
ベクタを空にする |
| 空かどうか判定 | vec.empty() |
要素が空ならtrue |
| 要素アクセス | vec[i], vec.at(i) |
atは範囲外アクセス時に例外が発生する |
| 初期化 | vec.assign(3, 100) |
3個の100で初期化 |
vector
オブジェクトの内部には次の情報が含まれています:
size())capacity())初期状態ではある程度の余裕(容量)を持ってメモリを確保します。
push_back()
による追加は、容量の範囲内なら再確保されずに高速。
容量を超えたときにのみ、新しいメモリ領域が確保されてコピーされます。
#include <iostream>
using namespace std;
int main() {
int nums[3] = {1, 2, 3};
for (int i = 0; i < 3; i++) {
cout << nums[i] << endl;
}
return 0;
}次の出力は?
int nums[3] = {1, 2, 3};0が入力されるまで整数を読み込み、すべて表示する
ベクタに5個追加 → 最後の要素を削除 → 残りを表示
5個の100で初期化 → 各要素を-10して表示
ベクタに格納された値の合計を求めて表示
(※各問題のコード・解答例は省略せず維持)
.push_back() .size() .at()
などのAPIで効率よく扱える