Въведение
Поради своя динамичен размер и простота на използване, векторите са сред най-често използваните структури от данни в 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(), за да определите размера на вектора. Достъпът до елементите на празен вектор ще доведе до неочаквано поведение.
отмяна на последния ангажимент
#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 цикъл - ще ви позволи надеждно да получите и модифицирате векторни елементи, както е необходимо за вашия програмист. За да предотвратите вероятни проблеми и недефинируемо поведение, имайте предвид да се справите с проверката на границите, да се грижите за размера на вектора и да прилагате предпазливост.