for ループによる反復処理
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 14/56。
個々の要素にアクセスする方法とベクトルのサイズを確認する方法を学んだので、伝統的な for ループを使用して、すべての要素を体系的に処理する方法を学びましょう。このアプローチでは、.size() メソッドとインデックスベースのアクセスを組み合わせて、各要素を順番に走査します。
従来のforループは、0から始まり、ベクターのサイズに達するまでインクリメントされるインデックス変数を使用します。
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
for (int i = 0; i < names.size(); i++) {
std::cout << names[i] << std::endl;
}この例では、ループ条件 i < names.size() によってベクトルの境界を超えないことが保証され、names[i] が現在のインデックスを使用して各要素にアクセスします。このループは、各名前を個別の行に出力します。
このパターンは、データのコレクションを処理するための基本です。インデックス変数 i を使用すると、操作している要素を正確に制御できるため、各要素の位置を知る必要がある場合や、反復処理中に要素を変更したい場合に便利です。
チャレンジ
簡単従来の for ループを使用して、製品名のベクターを反復処理し、番号付きリスト形式で表示するプログラムを作成してください。
以下の入力が提供されます:
- 製品の数を示す整数
n - それに続く
n個の製品名を表す文字列
プログラムは以下の手順で行う必要があります:
productsという名前のstd::vector<std::string>を作成するpush_back()を使用して、n個の各製品名をベクターに追加する- インデックス変数を使用した従来の for ループでベクターを反復処理する
- ループ内で、ループ条件に
.size()メソッドを使用する - インデックスによって各要素にアクセスするために、角括弧
[]演算子を使用する - 指定された形式で、各製品をその位置番号(1から開始)とともに表示する
以下の正確な出力形式を使用してください:
Product 1: [first product name]
Product 2: [second product name]
Product 3: [third product name]
...for ループはインデックス 0 から開始し、条件として i < products.size() を使用し、各反復で i をインクリメントする必要があります。表示する際は、インデックスに 1 を加えて、1 から始まる位置番号を表示してください。
チートシート
ベクターを反復処理するには、従来の for ループを使用し、.size() とインデックスベースのアクセスを組み合わせます:
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
for (int i = 0; i < names.size(); i++) {
std::cout << names[i] << std::endl;
}ループ条件 i < names.size() は、ベクターの境界を超えないことを保証し、一方で names[i] は現在のインデックスを使用して各要素にアクセスします。インデックス変数を使用すると、操作している要素を正確に制御でき、各要素の位置を把握することができます。
自分で試してみよう
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
// 商品の数を読み込む
int n;
cin >> n;
// 商品名を格納するためのvectorを作成する
vector<string> products;
// 商品名を読み込み、vectorに追加する
for (int i = 0; i < n; i++) {
string product;
cin >> product;
products.push_back(product);
}
// TODO: 以下にコードを記述してください
// 従来のforループを使用してvectorを反復処理し、
// 各商品とその位置番号を表示します
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。