08:配列とベクタ

はじめに

複数のデータをまとめて管理・操作するための「配列」と「ベクタ」について学びます。 配列はC言語でもおなじみですが、C++では「ベクタ(vector)」という便利な仕組みもあります。


ベクタ(vector)とは

C++標準ライブラリに用意された 可変長の配列 です。

vector<int> nums = {1, 2, 3, 4};  // これは変数名。ベクタ変数と呼びます。

配列とベクタの違い・使い分け

比較項目 配列 ベクタ (vector)
サイズ 固定 可変(動的に増減)
メモリ管理 手動 自動
初期化 軽量・高速 やや重い(柔軟性あり)
安全性 範囲外アクセスに弱い .at() で安全にアクセス
実行速度 高速 少しだけオーバーヘッドあり

配列が向いている場面

ベクタが向いている場面


ベクタの基本操作(08_vector_basic.cpp)

#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;
}

ベクタの宣言方法(08_vector_declare.cpp)

vector<int> a;             // 空のベクタ
vector<int> b(5);          // 要素数5、全て0で初期化
vector<int> c(5, 10);      // 要素数5、全て10で初期化
vector<int> d = {1, 2, 3}; // リスト初期化

よく使うメソッド(08_vector_methods.txt)

機能 書き方例 説明
要素の追加 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で初期化

ベクタの内部構造について(概念解説)


配列の例(08_array_basic.cpp)

#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;
}

理解度チェック

問題1(08_array_basic.cpp)

次の出力は?

int nums[3] = {1, 2, 3};
正解・解説を見る 1\n2\n3

演習問題

問題2(08_input_until_zero.cpp)

0が入力されるまで整数を読み込み、すべて表示する

問題3(08_remove_last.cpp)

ベクタに5個追加 → 最後の要素を削除 → 残りを表示

問題4(08_initialize_and_update.cpp)

5個の100で初期化 → 各要素を-10して表示

問題5(08_vector_sum.cpp)

ベクタに格納された値の合計を求めて表示

(※各問題のコード・解答例は省略せず維持)


まとめ