#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿