本文へスキップ
BecomeCoder

C++コース · 第8章 std::vector と範囲for ― 伸び縮みする配列 · レッスン31

std::vector の基本 ― 伸び縮みする配列

ブラウザで完結

導入

第5章の配列は、宣言時に個数を決める必要がありました。モダンな C++ では、要素数を後から変えられる std::vector(可変長配列)をよく使います。実務で「複数のデータをまとめて持つ」ときの第一候補です。

説明

<vector> を include し、vector<型> で宣言します。push_back で末尾に追加でき、サイズは size() で分かります。生の配列との違いは「後から伸ばせる」ことです。

flowchart LR
  subgraph V0["vector&lt;int&gt; 80, 95, 70"]
    direction LR
    a["80"]
    b["95"]
    c["70"]
  end
  V0 -->|"push_back(100)"| V1["80, 95, 70, 100<br/>(サイズが自動で 3→4)"]
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> scores = {80, 95, 70};
    scores.push_back(100);           // 末尾に追加(サイズが自動で増える)
    cout << scores.size() << endl;   // 4
    cout << scores[0] << endl;       // 80(配列と同じ添字アクセス)

    int total = 0;
    for (int i = 0; i < (int)scores.size(); i++) {
        total += scores[i];
    }
    cout << "合計 " << total << endl;  // 345
    return 0;
}

初期サイズを指定して作ることもできます。vector<int> v(5, 0) は「0 が5個」の意味です。

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v(5, 0);   // 0 が5個 → {0, 0, 0, 0, 0}
    v[2] = 99;
    cout << v.size() << " " << v[2] << endl;  // 5 99
    return 0;
}

まとめ

「いくつ入るか分からない」データには vector を使います。生の配列より安全で、追加・サイズ取得ができて扱いやすいです。添字アクセスは配列とまったく同じ書き方です。

実際に動かしてみよう

下のエディタにC++を書いて「コンパイル & 実行」を押すと、ブラウザ内で本物のC++コンパイラ(clang + libc++)がその場でコンパイルして実行し、出力が表示されます。std::string・vector・クラス・テンプレート・STL などモダンC++がそのまま動きます。本文の例を書き換えて試しながら進めましょう(初回だけコンパイラの読み込みに時間がかかります。以降はキャッシュされます。この回は標準入力(cin)は使わず、値はコードに直接書きます)。

C/C++ — ブラウザ内で本物のコンパイラで実行

ブラウザ内で本物のC/C++コンパイラ(clang + libc++ / WebAssembly)を動かします。構造体・malloc/free・std::string・vector・クラス・テンプレート・STL などがそのまま実行できます(初回のみコンパイラの読み込みに時間がかかります。以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。