C++超入門⑥ 配列・vector・stringを使おう
配列、std::vector、std::stringを使い、複数の数字や文字をまとめて扱う方法を学びます。
第6回では、複数の値をまとめて扱う方法を学びます。
5人分の点数を保存するとき、変数を5個作るより、配列やvectorへまとめる方が扱いやすくなります。
この回でできるようになること
- 配列へ複数の値を保存する
- 添字を使って一つの値を取り出す
- vectorへ後から値を追加する
- stringの文字数や一つの文字を調べる
配列の基本
同じ型の値を、決まった個数だけ並べたものを配列と呼びます。
int scores[3] = {80, 95, 70};
scoresには3個の整数が入っています。
一つの値を取り出すときは、位置を表す添字を使います。
std::cout << scores[0] << '\n';
std::cout << scores[1] << '\n';
最初の位置は0です。scores[0]が80、scores[1]が95になります。
配列を繰り返しで読む
for文と組み合わせると、すべての値を順番に読めます。
int scores[3] = {80, 95, 70};
for (int i = 0; i < 3; i++) {
std::cout << scores[i] << '\n';
}
iは0、1、2と変化します。存在しないscores[3]を読もうとすると、正しくない動作の原因になります。
配列の範囲からはみ出さないことが大切です。
vectorは大きさを変えられる
std::vectorは、後から値を増やしたり減らしたりできる入れ物です。
使うときは**#include <vector>**を読み込みます。
#include <iostream>
#include <vector>
int main() {
std::vector<int> scores = {80, 95};
scores.push_back(70);
for (int score : scores) {
std::cout << score << '\n';
}
return 0;
}
push_backは、vectorの最後へ値を追加します。
for (int score : scores)は、scoresの値を一つずつscoreへ入れて繰り返す書き方です。これを範囲for文と呼びます。
配列とvectorの違い
| 比較 | 配列 | vector |
|---|---|---|
| 大きさ | 最初に決める | 後から変えられる |
| 値の追加 | 基本的にできない | push_backで追加できる |
| 初心者の使いやすさ | 仕組みが単純 | 実用的で安全に扱いやすい |
個数が変わる可能性があるなら、vectorが便利です。
stringで文字を扱う
std::stringは文字列を扱う型です。
#include <iostream>
#include <string>
int main() {
std::string word = "code";
std::cout << word.length() << '\n';
std::cout << word[0] << '\n';
return 0;
}
length()は文字数を返します。word[0]では、最初の1文字を取り出します。
stringも位置を0から数えます。
小さな練習
vectorへ80、65、90、75を入れ、for文で合計を求めてください。
合計を人数で割ると平均を計算できます。小数の平均が必要な場合は、double型へ変換してから割ります。
模範解答
#include <iostream>
#include <vector>
int main() {
std::vector<int> scores = {80, 65, 90, 75};
int total = 0;
for (int score : scores) {
total += score;
}
double average = static_cast<double>(total) / scores.size();
std::cout << "合計: " << total << '\n';
std::cout << "平均: " << average << '\n';
return 0;
}
解説
範囲for文でvectorの値を1つずつscoreへ取り出しています。整数同士の割り算にならないよう、static_castでtotalを一時的にdouble型へ変換してから人数で割ります。
まとめ
- 配列は、同じ型の値を決まった個数だけ並べます。
- 添字は0から始まります。
- 個数が変わるデータにはvectorが便利です。
前の記事:C++超入門⑤ 関数で処理を分けよう