вступ
Завдяки своєму динамічному розміру та простоті використання вектори є одними з найбільш часто використовуваних структур даних у C++. Вони забезпечують гнучкість і швидке отримання елементів, дозволяючи зберігати й отримувати елементи в одному безперервному блоці пам’яті. Ви отримаєте повне розуміння того, як використовувати вектори в цьому підручнику, коли ми вивчатимемо кілька способів доступу до векторних елементів у C++.
1. Доступ до елементів за індексом
Використання їхніх індексів є одним із найпростіших методів отримання доступу до векторних елементів. Кожному елементу вектора присвоюється індекс, починаючи з 0 для першого елемента та збільшуючи на 1 для кожного наступного елемента. Використовуйте оператор нижнього індексу [] і відповідний індекс, щоб отримати елемент із заданим індексом.
#include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; int firstElement = numbers[0]; // Accessing the first element int thirdElement = numbers[2]; // Accessing the third element std::cout << 'First Element: ' << firstElement << std::endl; std::cout << 'Third Element: ' << thirdElement << std::endl; return 0; }
Вихід:
First Element: 10 Third Element: 30
2. Використання функції-члена at().
Використання функції-члена at() є ще одним методом для отримання векторних елементів. Метод at() пропонує перевірку меж, щоб переконатися, що ви не отримуєте доступ до елементів, розмір яких перевищує вектор. Виняток std::out_of_range створюється, якщо надається індекс поза діапазоном.
#include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; int firstElement = numbers.at(0); // Accessing the first element int thirdElement = numbers.at(2); // Accessing the third element std::cout << 'First Element: ' << firstElement << std::endl; std::cout << 'Third Element: ' << thirdElement << std::endl; return 0; }
Вихід:
First Element: 10 Third Element: 30
3. Передні та задні елементи
Крім того, вектори пропонують прямий доступ до своїх перших і останніх елементів через методи-члени front() і rear(), відповідно. Коли вам просто потрібно отримати доступ до кінцевих точок вектора, ці функції дуже корисні.
#include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; int firstElement = numbers.front(); // Accessing the first element int lastElement = numbers.back(); // Accessing the last element std::cout << 'First Element: ' << firstElement << std::endl; std::cout << 'Last Element: ' << lastElement << std::endl; return 0; }
Вихід:
First Element: 10 Last Element: 50
4. Використання ітераторів
Ітератори є потужним інструментом для навігації та отримання доступу до елементів у контейнерах, які надаються C++. Ітератори для векторів бувають двох варіантів: begin() і end(). Ітератор end() вказує на одне місце після останнього елемента, тоді як ітератор begin() вказує на початковий елемент вектора. Ви можете отримати доступ до елементів вектора, перебираючи його за допомогою цих ітераторів.
#include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; // Accessing elements using iterators for (auto it = numbers.begin(); it != numbers.end(); ++it) { int element = *it; // Process the element std::cout << element << ' '; } std::cout << std::endl; return 0; }
Вихід:
10 20 30 40 50
5. Доступ до елементів за допомогою циклу for на основі діапазону
Цикл for на основі діапазону, який спрощує процес ітерації шляхом автоматичного керування ітераторами, був представлений у C++11. Без явного підтримки ітераторів ви можете отримати доступ до векторних елементів за допомогою цієї функції.
#include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; // Accessing elements using a range-based for loop for (int element : numbers) { // Process the element std::cout << element << ' '; } std::cout << std::endl; return 0; }
Вихід:
10 20 30 40 50
6. Доступ до елементів за допомогою покажчиків
Вектори реалізовані в C++ як динамічно створюваний масив, а покажчики використовуються для доступу до їх елементів. Функцію-член data() можна використовувати для отримання адреси пам’яті першого елемента, а арифметику вказівника можна використовувати для отримання адрес послідовних елементів.
#include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; // Accessing elements using pointers int* ptr = numbers.data(); // Get the pointer to the first element for (size_t i = 0; i <numbers.size(); ++i) { int element="*(ptr" + i); process the std::cout << ' '; } std::endl; return 0; < pre> <p> <strong>Output:</strong> </p> <pre> 10 20 30 40 50 </pre> <p> <strong>7. Checking Vector Size</strong> </p> <p>Verify that the vector is not empty before attempting to access any of its elements. Use the size() member function to determine a vector's size. Accessing the elements of an empty vector will result in unexpected behavior.</p> <pre> #include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; if (!numbers.empty()) { // Access vector elements for (int element : numbers) { std::cout << element << ' '; } std::cout << std::endl; } else { std::cout << 'Vector is empty.' << std::endl; } return 0; } </pre> <p> <strong>Output:</strong> </p> <pre> 10 20 30 40 50 </pre> <p> <strong>8. Modifying Vector Elements</strong> </p> <p>When you have access to vector elements, you may change them in addition to retrieving their values. Using any of the access techniques, you may give vector elements new values.</p> <pre> #include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; numbers[2] = 35; // Modifying an element using index numbers.at(3) = 45; // Modifying an element using at() // Modifying the first and last elements numbers.front() = 15; numbers.back() = 55; // Printing the modified vector for (int element : numbers) { std::cout << element << ' '; } std::cout << std::endl; return 0; } </pre> <p> <strong>Output:</strong> </p> <pre> 15 20 35 45 55 </pre> <p> <strong>9. Handling Out-of-Range Access</strong> </p> <p>When utilizing indices to access vector elements, it's crucial to confirm that the index falls within the acceptable range. Accessing items that are larger than the vector will lead to unpredictable behavior. Make careful to carry out the necessary bounds checking if you need to access items based on computations or user input to prevent any mistakes.</p> <pre> #include #include // Function to get user input size_t getUserInput() { size_t index; std::cout <> index; return index; } int main() { std::vector numbers = {10, 20, 30, 40, 50}; size_t index = getUserInput(); if (index <numbers.size()) { int element="numbers[index];" process the std::cout << 'element at index ' ': std::endl; } else handle out-of-range access 'invalid index. out of range.' return 0; < pre> <p> <strong>Output:</strong> </p> <pre> Enter the index: 2 Element at index 2: 30 </pre> <h3>Conclusion</h3> <p>The ability to access vector elements in C++ is essential for working with this flexible data format. Understanding the different approaches-including index-based access, iterators, pointers, and the range-based for loop-will enable you to reliably obtain and modify vector items as needed for your programmer. To prevent probable problems and undefinable behavior, bear in mind to handle bounds checking, care for vector size, and apply prudence.</p> <hr></numbers.size())></pre></numbers.size();>
7. Перевірка розміру вектора
Перед спробою отримати доступ до будь-якого з його елементів переконайтеся, що вектор не порожній. Використовуйте функцію-член size(), щоб визначити розмір вектора. Доступ до елементів порожнього вектора призведе до неочікуваної поведінки.
python __name__
#include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; if (!numbers.empty()) { // Access vector elements for (int element : numbers) { std::cout << element << ' '; } std::cout << std::endl; } else { std::cout << 'Vector is empty.' << std::endl; } return 0; }
Вихід:
10 20 30 40 50
8. Зміна векторних елементів
Якщо у вас є доступ до векторних елементів, ви можете змінювати їх на додаток до отримання їхніх значень. Використовуючи будь-який із методів доступу, ви можете надати векторним елементам нові значення.
#include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; numbers[2] = 35; // Modifying an element using index numbers.at(3) = 45; // Modifying an element using at() // Modifying the first and last elements numbers.front() = 15; numbers.back() = 55; // Printing the modified vector for (int element : numbers) { std::cout << element << ' '; } std::cout << std::endl; return 0; }
Вихід:
15 20 35 45 55
9. Обробка доступу поза межами діапазону
Використовуючи індекси для доступу до векторних елементів, дуже важливо підтвердити, що індекс потрапляє в прийнятний діапазон. Доступ до елементів, розмір яких перевищує вектор, призведе до непередбачуваної поведінки. Щоб запобігти будь-яким помилкам, ретельно перевіряйте необхідні межі, якщо вам потрібно отримати доступ до елементів на основі обчислень або введених користувачем даних.
#include #include // Function to get user input size_t getUserInput() { size_t index; std::cout <> index; return index; } int main() { std::vector numbers = {10, 20, 30, 40, 50}; size_t index = getUserInput(); if (index <numbers.size()) { int element="numbers[index];" process the std::cout << \'element at index \' \': std::endl; } else handle out-of-range access \'invalid index. out of range.\' return 0; < pre> <p> <strong>Output:</strong> </p> <pre> Enter the index: 2 Element at index 2: 30 </pre> <h3>Conclusion</h3> <p>The ability to access vector elements in C++ is essential for working with this flexible data format. Understanding the different approaches-including index-based access, iterators, pointers, and the range-based for loop-will enable you to reliably obtain and modify vector items as needed for your programmer. To prevent probable problems and undefinable behavior, bear in mind to handle bounds checking, care for vector size, and apply prudence.</p> <hr></numbers.size())>
Висновок
Можливість доступу до векторних елементів у C++ є важливою для роботи з цим гнучким форматом даних. Розуміння різних підходів, зокрема доступу на основі індексів, ітераторів, покажчиків і циклу for на основі діапазону, дозволить вам надійно отримувати та змінювати векторні елементи за потреби програміста. Щоб запобігти ймовірним проблемам і невизначеній поведінці, пам’ятайте про перевірку меж, подбайте про розмір вектора та будьте обережні.