0Pricing
C++ Academy · レッスン

固定長std::array

安全なC配列の代替です

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

安全なC配列

std::array<T, N>は自身のサイズを把握している固定長配列で、適切なコンテナーとして動作します。<array>をインクルードしてください。

#include <iostream>
#include <array>
int main() {
    std::array<int, 3> a = {1, 2, 3};
    std::cout << a[0] << " " << a.size() << "\n";
}

自身のサイズを把握する

生の配列はポインターに変換されますが、std::arrayでは常にsize()で長さを取得できます。

#include <iostream>
#include <array>
int main() {
    std::array<double, 4> a{};
    std::cout << a.size() << "\n"; // 4
}

範囲ベースの for

通常のコンテナーなので、範囲ベースのforループで反復処理できます。

#include <iostream>
#include <array>
int main() {
    std::array<int, 3> a = {10, 20, 30};
    for (int x : a) std::cout << x << " ";
    std::cout << "\n";
}

範囲チェック付きの at()

at(i)は無効なインデックスに対してstd::out_of_rangeをスローしますが、operator[]はチェックしません。安全性の要件に応じて使い分けてください。

#include <iostream>
#include <array>
int main() {
    std::array<int, 2> a = {1, 2};
    try { a.at(5); }
    catch (const std::out_of_range&) { std::cout << "out of range\n"; }
}

front、back、data

便利なアクセサーです。front()とback()はそれぞれ先頭と末尾の要素を返し、data()はC API用の生のポインターを返します。

#include <iostream>
#include <array>
int main() {
    std::array<int, 3> a = {7, 8, 9};
    std::cout << a.front() << " " << a.back() << "\n";
}

値としてコピー可能

std::arrayは=で各要素をコピーできるため、問題なくコピーできます。ポインターに変換される生の配列とは異なります。

#include <iostream>
#include <array>
int main() {
    std::array<int, 3> a = {1, 2, 3};
    std::array<int, 3> b = a; // full copy
    b[0] = 99;
    std::cout << a[0] << " " << b[0] << "\n"; // 1 99
}

アルゴリズムと連携

標準アルゴリズムはstd::arrayのイテレーターを受け取れます。ここでは配列をソートしています。

#include <iostream>
#include <array>
#include <algorithm>
int main() {
    std::array<int, 4> a = {4, 1, 3, 2};
    std::sort(a.begin(), a.end());
    for (int x : a) std::cout << x << " ";
    std::cout << "\n";
}

要素の設定と比較

fill(value)はすべての要素に値を設定します。また、std::arrayは要素ごとの==比較にも対応しています。

#include <iostream>
#include <array>
int main() {
    std::array<int, 3> a{};
    a.fill(5);
    std::array<int, 3> b = {5, 5, 5};
    std::cout << (a == b) << "\n"; // 1
}

サイズは型の一部

長さNは型に組み込まれているため、std::array<int,3>を受け取る関数にサイズ4の配列を渡すことはできません。このような場合に、後で学ぶstd::spanが役立ちます。

スタック上に確保

std::arrayは要素をインラインで格納し、通常はスタック上に配置されます。ヒープ割り当てがないため、固定サイズのデータを高速かつ予測可能に扱えます。

arrayとvectorの比較

サイズがコンパイル時に決まり、変更されない場合はstd::arrayを使用してください。実行時にサイズが変わる可能性がある場合はstd::vectorを使用してください。

理解度チェック

std::arrayについての理解度を確認してください。

まとめ

std::arrayについて学びました。

  • 固定サイズでサイズを把握できるコンテナーであり、ヒープ割り当てはありません。
  • at()は範囲をチェックしますが、[]はチェックしません。
  • コピーや比較が可能で、アルゴリズムと連携できます。
  • サイズNは型の一部です。

よくある質問

「固定長std::array」レッスンは無料ですか?

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

「固定長std::array」で何を学びますか?

安全なC配列の代替です ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「固定長std::array」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 固定長std::array
  2. std::spanの基礎
  3. 関数へのspanの渡し方
  4. 範囲とサブスパン
← C++ Academyに戻る