Menu
Coddy logo textTech

Доступ к элементам

Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 12 из 56.

Теперь, когда вы умеете создавать векторы и добавлять в них элементы, вам нужно знать, как извлекать конкретные элементы из вашего вектора. C++ предоставляет два основных способа доступа к отдельным элементам: оператор квадратных скобок и метод .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, представляющее первый индекс для доступа
  • Целое число index2, представляющее второй индекс для доступа

Ваша программа должна:

  1. Создать std::vector<int> с именем data
  2. Использовать push_back() для добавления каждого из n входных чисел в вектор
  3. Получить доступ к элементу по индексу index1, используя оператор квадратных скобок [], и сохранить его в переменной с именем value1
  4. Получить доступ к элементу по индексу index2, используя метод .at(), и сохранить его в переменной с именем 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++ предоставляют два основных способа доступа к отдельным элементам:

Оператор квадратных скобок []:

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Проверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком