Доступ к элементам
Часть раздела Логика и управление потоком путешествия по 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() обеспечивает дополнительную защиту от доступа к недопустимым позициям в вашем векторе.
Задание
ЛегкоСоздайте программу, которая демонстрирует доступ к элементам вектора, извлекая определенные элементы из вектора с использованием оператора квадратных скобок и метода .at().
Будут предоставлены следующие входные данные:
- Целое число
n, представляющее количество элементов в векторе - Затем
nцелых чисел для заполнения вектора - Целое число
index1, представляющее первый индекс для доступа - Целое число
index2, представляющее второй индекс для доступа
Ваша программа должна:
- Создать
std::vector<int>с именемdata - Использовать
push_back()для добавления каждого изnвходных чисел в вектор - Получить доступ к элементу по индексу
index1, используя оператор квадратных скобок[], и сохранить его в переменной с именемvalue1 - Получить доступ к элементу по индексу
index2, используя метод.at(), и сохранить его в переменной с именемvalue2 - Вывести полученные значения и соответствующие им индексы
- Вывести первый и последний элементы вектора, используя доступ по индексу
Используйте следующий точный формат вывода:
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;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров