#7 C++で学ぶ配列の基本

C++には、複数の値をまとめて扱うデータ構造として、伝統的な「配列」と、現代的な「vector」という2種類の仕組みがあります。この記事では、それぞれの違いと基本的な使い方を解説します。

配列(固定長)

C++の伝統的な配列は、大きさがあらかじめ決まっていて、後から変更できません。

std::string fruits[3] = {"りんご", "みかん", "ぶどう"};

vector(可変長)

大きさを自由に変えたい場合は、std::vectorを使うのが現代的な書き方です。

#include 

std::vector fruits = {"りんご", "みかん", "ぶどう"};
fruits.push_back("メロン");

値を追加するにはpush_back()を使います。要素数を調べたい場合はfruits.size()が使えます。

要素にアクセスする・繰り返す

配列・vectorどちらも、角かっこ[]を使って0から始まる添字でアクセスします。

std::cout << fruits[0];

for (const auto& fruit : fruits) {
    std::cout << fruit << std::endl;
}

for (const auto& fruit : fruits)という書き方は「範囲for文」と呼ばれ、他の言語のfor-eachに相当する、現代的なC++でよく使われる書き方です。

範囲外アクセスを検出するat()

[]による添字アクセスは範囲外でもエラーにならない一方、at()という別のメソッドを使うと、範囲外アクセス時に例外を発生させて教えてくれます。

try {
    std::cout << fruits.at(10); // 存在しない添字
} catch (const std::out_of_range& e) {
    std::cout << "範囲外です" << std::endl;
}

デバッグ中や、入力値によって添字が変わる場面では、at()を使うことでバグの早期発見につながります。

C++ならではの注意点

C++の伝統的な配列は、範囲外の添字を指定してもエラーにならず、意図しないメモリを読み書きしてしまうことがあります。これは重大なバグの原因になりやすいため、特別な理由がない限り、安全性の高いvectorを使うことが強く推奨されています。vectorの[]も同様に範囲外チェックを行わないため、確実性が必要な場面ではat()を使い分けましょう。

vectorの要素を加工する

標準ライブラリの<algorithm>を使うと、並べ替えや検索といった操作も簡潔に書けます。

#include 

std::sort(fruits.begin(), fruits.end());
auto it = std::find(fruits.begin(), fruits.end(), "りんご");

まとめ

C++には固定長の配列と可変長のvectorがあり、現代的な開発ではvectorを使うのが基本です。範囲外アクセスを検出したい場合はat()、並べ替えや検索には<algorithm>も活用し、安全性の高いコードを書きましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

C++をもっと学びたい方には「新・明解C++入門編」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本