vector、std::array、C配列の比較
3種類のシーケンスコンテナを比較し、サイズ、所有権、性能に基づいて選びます。
「vector、std::array、C配列の比較」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。
3つの連続コンテナ
C++には、連続した要素の並びを保持する方法が3つあります。
- std::vector — サイズが可変で、ヒープに格納
- std::array — コンパイル時にサイズが固定され、スタックに格納
- C-style array — サイズが固定された低レベルの配列
C形式配列
最も古い形式です。サイズは型の一部です。関数に渡すとポインターに変換され、サイズが失われます。
int a[5] = {1, 2, 3, 4, 5};
std::cout << a[2]; // 3C形式配列の問題点
多くの場面でサイズ情報が失われ、範囲チェックも行われないため、誤用しやすい配列です。新しいコードでは、std::arrayまたはstd::vectorを優先してください。
std::array(C++11)
固定サイズ配列を薄くラップしたものです。C配列と同じ性能を持ちながら、独立した型と適切なメンバー関数を備えています。
#include <array>
std::array<int, 5> a = {1, 2, 3, 4, 5};
std::cout << a.size(); // 5
std::cout << a.at(2); // bounds-checkedstd::arrayはスタックに残る
vectorとは異なり、std::arrayは要素を直接格納します。ヒープ割り当ては発生しません。サイズはテンプレートパラメーターです。
可変サイズにはstd::vector
コンパイル時にサイズが分からない場合や、実行時にサイズが変わる場合はstd::vectorを使用してください。
性能比較
サイズが固定されている場合、3種類とも性能はほぼ同じです。std::vectorでは、ポインターとサイズの管理に加えて、間接参照が1回増えるため、わずかなオーバーヘッドがあります。
関数への受け渡し
コピーを避けるには、vectorやstd::arrayをconst参照で渡してください。借用する場合、C配列はstd::span(C++20)に置き換えるべきです。
void process(const std::vector<int>& v);
void process(const std::array<int, 5>& a);
#include <span>
void process(std::span<const int> data); // accepts bothstd::span(C++20)
連続した要素の並びを所有せずに参照するビューです。ポインターと長さの組み合わせに似ています。vector、std::array、C配列を同じように受け取れます。
どれを選ぶべきか
判断の目安:
- 可変サイズが必要 →
std::vector - 固定サイズで、割り当てが不要 →
std::array - 所有せずに借用 →
std::span - Cコードとの相互運用 → C配列
相互変換
rangesやアルゴリズムを使って、型の異なるコンテナ間で要素をコピーできます。
std::array<int, 3> a = {1, 2, 3};
std::vector<int> v(a.begin(), a.end());
int c[3];
std::copy(a.begin(), a.end(), c);確認問題
要素をスタックに格納し、コンパイル時にサイズが決まっているコンテナはどれですか。
まとめ
可変サイズにはstd::vector、固定サイズにはstd::arrayを優先してください。現代的なコードでは、C形式配列が最適な選択になることはほとんどありません。所有せずに並びを借用するにはstd::spanを使用してください。
AI チューターと学ぶ C++ — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 51
- レッスン
- 203
よくある質問
「vector、std::array、C配列の比較」レッスンは無料ですか?
はい。「vector、std::array、C配列の比較」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。
「vector、std::array、C配列の比較」で何を学びますか?
3種類のシーケンスコンテナを比較し、サイズ、所有権、性能に基づいて選びます。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C++ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「vector、std::array、C配列の比較」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC++ Academyレッスンでコードを書いて実行できますか?
はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- std::vectorの基本:push_back、size、capacity
- vectorの反復処理:インデックス、範囲for、イテレーター
- vectorの変更:insert、erase、clear
- vector、std::array、C配列の比較