Uvod
Zaradi svoje dinamične velikosti in enostavnosti uporabe so vektorji med najpogosteje uporabljenimi podatkovnimi strukturami v C++. Zagotavljajo vam prilagodljivost in hitro pridobivanje elementov, saj vam omogočajo shranjevanje in pridobivanje elementov v enem samem sosednjem pomnilniškem bloku. V tej vadnici boste temeljito razumeli, kako uporabljati vektorje, ko preučujemo več načinov za dostop do vektorskih elementov v C++.
1. Dostop do elementov po indeksu
Uporaba njihovih indeksov je med najlažjimi metodami za dostop do vektorskih elementov. Vsakemu elementu v vektorju je dodeljen indeks, ki se začne pri 0 za prvi element in se poveča za 1 za vsakega nadaljnjega člana. Za pridobitev elementa na danem indeksu uporabite subscript operator [] in ustrezen indeks.
#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; }
Izhod:
First Element: 10 Third Element: 30
2. Uporaba članske funkcije at().
Uporaba članske funkcije at() je še ena tehnika za pridobivanje vektorskih elementov. Metoda at() ponuja preverjanje meja, da zagotovite, da ne dostopate do elementov, ki so večji od vektorja. Izjema std::out_of_range se vrže, če je naveden indeks zunaj obsega.
#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; }
Izhod:
First Element: 10 Third Element: 30
3. Sprednji in zadnji elementi
Poleg tega vektorji ponujajo neposreden dostop do svojih prvih in zadnjih postavk prek metod članov front() oziroma rear(). Ko preprosto potrebujete dostop do končnih točk vektorja, so te funkcije zelo koristne.
#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; }
Izhod:
First Element: 10 Last Element: 50
4. Uporaba iteratorjev
Iteratorji so močno orodje za navigacijo in pridobivanje dostopa do postavk v vsebnikih, ki jih ponuja C++. Iteratorji za vektorje so na voljo v dveh različicah: begin() in end(). Iterator end() kaže eno mesto za zadnjim elementom, medtem ko iterator begin() kaže na začetni člen vektorja. Do elementov vektorja lahko dostopate s ponavljanjem po njem s temi iteratorji.
#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; }
Izhod:
10 20 30 40 50
5. Dostopanje do elementov z zanko for na podlagi obsega
Zanka for na podlagi obsega, ki poenostavi postopek iteracije s samodejnim upravljanjem iteratorjev, je bila predstavljena v C++11. Brez izrecnega vzdrževanja iteratorjev lahko s to funkcionalnostjo dostopate do vektorskih elementov.
#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; }
Izhod:
10 20 30 40 50
6. Dostop do elementov s kazalci
Vektorji so implementirani v C++ kot dinamično ustvarjena matrika, kazalci pa se uporabljajo za dostop do njihovih elementov. Funkcijo data() lahko uporabite za pridobitev pomnilniškega naslova prvega elementa, aritmetiko kazalca pa lahko uporabite za pridobitev naslovov zaporednih elementov.
#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. Preverjanje velikosti vektorja
Preverite, ali vektor ni prazen, preden poskusite dostopati do katerega koli od njegovih elementov. Za določitev velikosti vektorja uporabite člansko funkcijo size(). Dostopanje do elementov praznega vektorja bo povzročilo nepričakovano vedenje.
rosomah proti jazbecu
#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; }
Izhod:
10 20 30 40 50
8. Spreminjanje vektorskih elementov
Ko imate dostop do vektorskih elementov, jih lahko spremenite poleg pridobivanja njihovih vrednosti. Z uporabo katere koli od tehnik dostopa lahko vektorskim elementom daste nove vrednosti.
#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; }
Izhod:
15 20 35 45 55
9. Ravnanje z dostopom izven dosega
Pri uporabi indeksov za dostop do vektorskih elementov je ključno potrditi, da indeks spada v sprejemljivo območje. Dostopanje do elementov, ki so večji od vektorja, bo povzročilo nepredvidljivo vedenje. Če želite dostopati do elementov na podlagi izračunov ali uporabniškega vnosa, bodite previdni pri izvajanju potrebnih preverjanj meja, da preprečite morebitne napake.
#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())>
Zaključek
Možnost dostopa do vektorskih elementov v C++ je bistvenega pomena za delo s tem prilagodljivim formatom podatkov. Razumevanje različnih pristopov – vključno z dostopom na podlagi indeksa, iteratorji, kazalci in zanko for na osnovi obsega – vam bo omogočilo zanesljivo pridobivanje in spreminjanje vektorskih postavk, kot jih potrebuje vaš programer. Da bi preprečili verjetne težave in neopredeljivo vedenje, ne pozabite izvajati preverjanja meja, skrbeti za velikost vektorja in biti preudarni.