C++ Academy · レッスン

vector、std::array、C配列の比較

3種類のシーケンスコンテナを比較し、サイズ、所有権、性能に基づいて選びます。

レッスン 4/413 ステップ

「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];   // 3

C形式配列の問題点

多くの場面でサイズ情報が失われ、範囲チェックも行われないため、誤用しやすい配列です。新しいコードでは、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-checked

std::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 both

std::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フィードバックを取得できます。ローカル設定は不要です。

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

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