std::vectorの基本:push_back、size、capacity
vectorを作成・拡張・調査し、capacityとsizeの違いを理解します。
「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 dpush_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 placesize と 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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- std::vectorの基本:push_back、size、capacity
- vectorの反復処理:インデックス、範囲for、イテレーター
- vectorの変更:insert、erase、clear
- vector、std::array、C配列の比較