Увод
Због своје динамичке величине и једноставности употребе, вектори су међу најчешће коришћеним структурама података у Ц++. Они вам пружају флексибилност и брзо проналажење елемената омогућавајући вам да складиштите и преузимате ставке у једном, суседном меморијском блоку. Добићете темељно разумевање како да користите векторе у овом водичу док проучавамо неколико начина за приступ векторским елементима у Ц++.
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. Коришћење функције члана ат().
Коришћење функције члана ат() је још једна техника за добијање векторских ставки. Метода ат() нуди проверу граница како бисте били сигурни да не приступате елементима који су већи од вектора. Изузетак стд::оут_оф_ранге се јавља ако је достављен индекс ван опсега.
#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. Предњи и задњи елементи
Поред тога, вектори нуде директан приступ својим првим и последњим ставкама преко метода члана фронт() и реар(), респективно. Када једноставно треба да приступите крајњим тачкама вектора, ове функције су од велике помоћи.
#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. Коришћење итератора
Итератори су моћан алат за навигацију и добијање приступа ставкама у контејнерима које обезбеђује Ц++. Итератори за векторе долазе у две врсте: бегин() и енд(). Итератор енд() показује једно место иза последњег елемента, док итератор бегин() показује на почетни члан вектора. Можете приступити ставкама вектора тако што ћете га итерирати помоћу ових итератора.
#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. Приступање елементима помоћу петље засноване на опсегу
Петља фор заснована на опсегу, која поједностављује процес итерације аутоматским управљањем итераторима, уведена је у Ц++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. Приступање елементима помоћу показивача
Вектори су имплементирани у Ц++ као динамички креирани низ, а показивачи се користе за приступ њиховим елементима. Функција члана дата() може се користити за добијање меморијске адресе првог елемента, а аритметика показивача може се користити за добијање адреса узастопних ставки.
#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. Провера векторске величине
Проверите да вектор није празан пре него што покушате да приступите неком од његових елемената. Користите функцију члана сизе() да одредите величину вектора. Приступ елементима празног вектора резултираће неочекиваним понашањем.
точкић за померање не ради
#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())>
Закључак
Могућност приступа векторским елементима у Ц++ је од суштинског значаја за рад са овим флексибилним форматом података. Разумевање различитих приступа – укључујући приступ заснован на индексу, итераторе, показиваче и петљу фор заснован на опсегу – омогућиће вам да поуздано добијете и модификујете векторске ставке по потреби за вашег програмера. Да бисте спречили вероватне проблеме и недефинисано понашање, имајте на уму да се бавите провером граница, водите рачуна о величини вектора и примените опрезност.