C++ Academy · レッスン

std::vectorの基本:push_back、size、capacity

vectorを作成・拡張・調査し、capacityとsizeの違いを理解します。

レッスン 1/413 ステップ

「std::vectorの基本:push_back、size、capacity」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。

std::vector を使う理由

std::vector は C++ のデフォルトのコンテナです。自動的にサイズが拡張され、メモリを管理してくれるうえ、O(1) のランダムアクセスを提供します。特別な理由がない限り、これを使用してください。

インクルードと宣言

<vector> をインクルードし、要素型をテンプレートパラメーターとして指定して宣言します。

#include <vector>

std::vector<int> nums;
std::vector<std::string> names = {"Ada", "Bob"};

初期化の形式

vector の初期化には、いくつかの方法があります。

std::vector<int> a;              // empty
std::vector<int> b(5);           // 5 zeros
std::vector<int> c(5, 42);       // 5 copies of 42
std::vector<int> d{1, 2, 3};     // {1,2,3}
std::vector<int> e(d);           // copy of d

push_back: 末尾に追加

push_back を使うと、末尾に要素を追加できます。償却 O(1) です。

std::vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);

emplace_back: その場で構築

emplace_back は引数を要素のコンストラクターに転送するため、一時オブジェクトが作成されません。非トリビアル型では、少し高速になります。

std::vector<std::pair<int,int>> v;
v.emplace_back(1, 2);  // constructs a pair in place

size と capacity

この2つは異なる概念です。

  • size — 現在格納されている要素数
  • capacity — 再割り当てせずに格納できる要素数

capacity は通常、倍増するようにまとまった単位で増加します。

size と capacity の確認

対応するメンバー関数を使用します。

std::vector<int> v;
for (int i = 0; i < 10; ++i) {
    v.push_back(i);
    std::cout << "size=" << v.size() << " capacity=" << v.capacity() << "\n";
}

reserve: capacity を事前確保

追加する要素数がわかっている場合は、先に reserve を呼び出すと、繰り返し発生する再割り当てを避けられます。

std::vector<int> v;
v.reserve(1000000);     // preallocate
for (int i = 0; i < 1000000; ++i) v.push_back(i);

shrink_to_fit: メモリを解放

多くの要素を削除した後は、shrink_to_fit を使って未使用の capacity を解放できます。ただし、この動作は実装に強制されないため、実装によっては余分な領域を保持する場合があります。

要素へのアクセス

方法は4つあります。

  • v[i] — 範囲チェックなし
  • v.at(i) — 範囲チェックあり。例外を送出
  • v.front() — 先頭の要素
  • v.back() — 末尾の要素

empty と clear

empty() で空かどうかを確認できます。clear() ですべての要素を削除できますが、capacity は変わりません。

理解度チェック

push_back の実行時間が償却 O(1) なのはなぜですか。

まとめ

std::vector は、O(1) のランダムアクセスが可能な可変長配列です。size() は要素数、capacity() は確保済みの領域のサイズを表します。最終的なサイズがわかっている場合は、reserve() で再割り当てを避けられます。

無料で開始

AI チューターと学ぶ C++ — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
51
レッスン
203

よくある質問

「std::vectorの基本:push_back、size、capacity」レッスンは無料ですか?

はい。「std::vectorの基本:push_back、size、capacity」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。

「std::vectorの基本:push_back、size、capacity」で何を学びますか?

vectorを作成・拡張・調査し、capacityとsizeの違いを理解します。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C++ Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「std::vectorの基本:push_back、size、capacity」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC++ Academyレッスンでコードを書いて実行できますか?

はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. std::vectorの基本:push_back、size、capacity
  2. vectorの反復処理:インデックス、範囲for、イテレーター
  3. vectorの変更:insert、erase、clear
  4. vector、std::array、C配列の比較
← C++ Academyに戻る