Menu
Coddy logo textTech

要素へのアクセス

CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 12/56。

ベクターを作成し、要素を追加できるようになったので、ベクターから特定の要素を取得する方法を知る必要があります。C++では、個々の要素にアクセスするための主な方法が2つ用意されています。それは、角括弧演算子と.at()メソッドです。

角括弧演算子 [] は、通常の配列と同じように動作します。アクセスしたい要素のインデックスを指定します:

std::vector<int> numbers = {10, 20, 30, 40};
int first = numbers[0];    // 10を取得
int third = numbers[2];    // 30を取得

.at()メソッドは、要素にアクセスするための別の方法を提供します。重要な違いとして、これには境界チェックが含まれています:

int first = numbers.at(0);    // 10を取得
int third = numbers.at(2);    // 30を取得

主な違いは安全性です。存在しないインデックスにアクセスしようとした場合、[] は予期しない動作を引き起こす可能性がありますが、一方で .at() は例外をスローしてエラーを通知します。学習目的であれば、どちらのメソッドも十分に機能しますが、.at() はベクター内の無効な位置へのアクセスに対して追加の保護を提供します。

challenge icon

チャレンジ

簡単

角括弧演算子と .at() メソッドの両方を使用して、ベクターから特定の要素を取得することにより、ベクター要素へのアクセスを実演するプログラムを作成してください。

以下の入力が提供されます:

  • ベクター内の要素数を表す整数 n
  • ベクターに格納する n 個の整数
  • アクセスする最初のインデックスを表す整数 index1
  • アクセスする2番目のインデックスを表す整数 index2

プログラムは以下の手順で行ってください:

  1. data という名前の std::vector<int> を作成する
  2. push_back() を使用して、入力された n 個の各数値をベクターに追加する
  3. 角括弧 [] 演算子を使用して index1 の要素にアクセスし、それを value1 という名前の変数に格納する
  4. .at() メソッドを使用して index2 の要素にアクセスし、それを value2 という名前の変数に格納する
  5. アクセスした値とそれに対応するインデックスを出力する
  6. インデックスベースのアクセスを使用して、ベクターの最初と最後の要素を出力する

以下の正確な出力形式を使用してください:

Element at index [index1]: [value1]
Element at index [index2]: [value2]
First element: [first value]
Last element: [last value]

最後の要素にアクセスするには、角括弧演算子のインデックスとして data.size() - 1 を使用してください。

チートシート

C++のvectorは、個々の要素にアクセスするための主な方法を2つ提供しています:

角括弧演算子 []:

std::vector<int> numbers = {10, 20, 30, 40};
int first = numbers[0];    // 10を取得
int third = numbers[2];    // 30を取得

.at() メソッド:

int first = numbers.at(0);    // 10を取得
int third = numbers.at(2);    // 30を取得

主な違いは安全性です。[] は無効なインデックスにアクセスした場合に予測不可能な動作を引き起こす可能性がありますが、.at() は境界チェックによる保護のために例外をスローします。

最後の要素にアクセスするには、インデックスとして data.size() - 1 を使用します。

自分で試してみよう

#include <iostream>
#include <vector>
using namespace std;

int main() {
    // 入力を読み込む
    int n;
    cin >> n;
    
    vector<int> data;
    
    // n個の整数を読み込み、ベクトルに追加する
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;
        data.push_back(num);
    }
    
    int index1, index2;
    cin >> index1;
    cin >> index2;
    
    // TODO: 以下にコードを記述してください
    // [] 演算子と .at() メソッドを使用して要素にアクセスします
    // アクセスした値を value1 と value2 に格納します
    
    // 結果を出力する
    cout << "Element at index " << index1 << ": " << value1 << endl;
    cout << "Element at index " << index2 << ": " << value2 << endl;
    cout << "First element: " << /* 最初の要素にアクセス */ << endl;
    cout << "Last element: " << /* data.size() - 1 を使用して最後の要素にアクセス */ << endl;
    
    return 0;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理と制御フローのすべてのレッスン