固定長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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 固定長std::array
- std::spanの基礎
- 関数へのspanの渡し方
- 範囲とサブスパン