logo

C++에서 벡터 요소에 액세스하는 방법

소개

동적 크기와 사용의 단순성으로 인해 벡터는 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++에서 제공하는 컨테이너의 항목을 탐색하고 액세스하기 위한 강력한 도구입니다. 벡터의 반복자는 시작()과 끝()의 두 가지 형태로 제공됩니다. 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&apos;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 &lt;&lt; element &lt;&lt; &apos; &apos;; } std::cout &lt;&lt; std::endl; } else { std::cout &lt;&lt; &apos;Vector is empty.&apos; &lt;&lt; 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 &lt;&lt; element &lt;&lt; &apos; &apos;; } std::cout &lt;&lt; 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&apos;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 &lt;&gt; 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 &lt;&lt; element &lt;&lt; &apos; &apos;; } std::cout &lt;&lt; std::endl; } else { std::cout &lt;&lt; &apos;Vector is empty.&apos; &lt;&lt; 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 &lt;&lt; element &lt;&lt; &apos; &apos;; } std::cout &lt;&lt; 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 &lt;&gt; 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 루프를 포함한 다양한 접근 방식을 이해하면 프로그래머가 필요로 하는 대로 벡터 항목을 안정적으로 얻고 수정할 수 있습니다. 발생할 수 있는 문제와 정의할 수 없는 동작을 방지하려면 경계 검사를 처리하고, 벡터 크기를 주의하고, 신중하게 적용해야 한다는 점을 명심하세요.