안 C++의 반복자 STL 컨테이너의 요소를 가리키는 포인터 같은 개체입니다. 일반적으로 C++에서 STL 컨테이너의 내용을 반복하는 데 사용됩니다. STL 반복자의 주요 장점은 사용되는 컨테이너 유형과 관계없이 STL 알고리즘을 독립적으로 만든다는 것입니다. STL 알고리즘에 컨테이너 자체를 전달하는 대신 컨테이너 요소에 반복자를 전달할 수 있습니다.
반복자 선언
C++ STL의 각 컨테이너에는 자체 반복자가 있습니다. 따라서 반복자를 다음과 같이 선언해야 합니다.
C++
<type>::iterator it;
어디
- 유형: 반복자가 선언된 컨테이너 유형입니다.
- 그것: 반복자 개체에 할당된 이름입니다.
그런 다음 유효한 반복자를 할당하여 초기화할 수 있습니다. 선언 시 할당할 반복자가 이미 있는 경우 다음을 사용하여 유형 선언을 건너뛸 수 있습니다. 자동 예어.
C++auto it = iter
어디 새로 생성된 it 반복자에 할당된 반복자입니다.
우리의 C++ 코스 다양한 컨테이너 유형을 탐색하는 방법을 이해할 수 있도록 STL의 반복기 사용을 다룹니다.
아래 프로그램은 반복자를 사용하여 벡터 컨테이너를 탐색하는 방법을 보여줍니다.
C++#include using namespace std; int main() { vector<int> v = {1 2 3 4 5}; // Defining an iterator pointing to // the beginning of the vector vector<int>::iterator first = v.begin(); // Defining an iterator pointing // to the end of the vector vector<int>::iterator last = v.end(); // Iterating the whole vector while(first != last) { cout << *first << ' '; first++; } return 0; }
산출
1 2 3 4 5
당신도 알 수 있듯이 우리는 벡터::시작() 및 벡터::끝() 기능. 이러한 함수는 벡터의 첫 번째 요소와 마지막 요소 다음의 한 요소에 대한 반복자를 반환하는 std::Vector의 멤버 함수입니다. 벡터를 반복하기 위해 반복자 반환 함수를 사용합니다.
컨테이너 반복자 함수
C++ STL은 다음에서 일부 멤버 함수를 제공합니다. 최소한 첫 번째 요소와 마지막 요소에 대한 반복자를 반환합니다. 이러한 멤버 함수는 거의 모든 STL 컨테이너에 정의되어 있습니다. 스택 대기줄 ) 일관성을 위해 동일한 이름을 사용합니다.
다음 표에는 반복자를 컨테이너에 반환하는 모든 메서드가 나열되어 있습니다.
시작하다() | 컨테이너의 시작 부분에 반복자를 반환합니다. |
끝() | 컨테이너의 마지막 요소 바로 뒤의 이론적인 요소에 대한 반복자를 반환합니다. |
| 컨테이너의 시작 부분에 상수 반복자를 반환합니다. 상수 반복자는 자신이 가리키는 요소의 값을 수정할 수 없습니다. |
정규식 자바 란 무엇입니까? | 컨테이너의 마지막 요소 바로 뒤의 이론적인 요소에 상수 반복자를 반환합니다. |
| 컨테이너의 시작 부분에 대한 역방향 반복자를 반환합니다. |
세우다() | 컨테이너의 마지막 요소 바로 뒤의 이론적인 요소에 역방향 반복기를 반환합니다. |
| 컨테이너의 시작 부분에 상수 역방향 반복자를 반환합니다. |
| 컨테이너의 마지막 요소 바로 뒤의 이론적인 요소에 상수 역방향 반복자를 반환합니다. |
벡터의 이름이면 아래와 같이 위의 방법을 사용할 수 있습니다.
C++vec.begin() vec.rbegin() vec.cbegin() vec.crbegin() vec.end() vec.rend() vec.cend() vec.crend()
포인터 산술과 마찬가지로 C++ 반복자에서 허용되는 몇 가지 작업이 있습니다. 반복자의 중요성을 높이는 다양한 기능을 제공하는 데 사용됩니다. There are 5 valid C++의 반복자 연산 :
- 증가/감소 반복자
- 반복자에 정수 더하기/빼기
- 다른 반복자 빼기
- 반복자 비교
반복자 역참조
역참조 작업을 통해 사용자는 다음을 수행할 수 있습니다. 반복자가 가리키는 요소의 값입니다. 우리는 (*) 간접 연산자 포인터처럼 반복자를 역참조합니다.
C++// Access *it; // Update *it = new_val;
어디 new_val 반복자가 가리키는 요소에 할당된 새 값입니다. 그것 .
증가/감소 반복자
다음을 사용하여 반복자를 1씩 늘리거나 줄일 수 있습니다. (++) 또는 (--) 연산자 각기. 증분 연산은 반복자를 컨테이너의 다음 요소로 이동하고 감소 연산은 반복자를 이전 요소로 이동합니다.
C++it++; // post-increment ++it; // pre-increment it--; // post-decrement --it; // pre-decrement
반복자에 정수 더하기/빼기
반복자에서 정수 값을 더하거나 뺄 수도 있습니다. 추가된 정수 값에 따라 다음 또는 이전 위치에 반복자가 더 많아집니다.
C++// Addition it + int_val; // Subtraction it - int_val;
어디 int_val 반복자에서 더하거나 빼는 정수 값입니다. 그것 .
다른 반복자 빼기
하나의 반복자에서 다른 반복자를 빼서 그들이 가리키는 메모리 사이의 거리(또는 요소 수)를 찾을 수 있습니다.
C++it1 - it2
반복자 비교
또한 동일한 유형의 두 반복자를 서로 테스트하여 둘 사이의 관계를 찾을 수도 있습니다. (==) 같음 및 (!=) 같지 않음 연산자와 같은 관계 연산자를 다음과 같은 다른 관계 연산자와 함께 사용할 수 있습니다.< > <= >=.
C++it1 != it2 // Equal to it1 == it2 // Not equal to it1 > it2 // Greater than it1 < it2 // Less than it1 >= it2 // Greater than equal to it1 <= it2 // Less than equal to
C++의 반복기 유형
STL 반복자는 수행할 수 있는 작업을 기준으로 나눌 수 있습니다. C++에는 지원되는 컨테이너 및 지원되는 반복기 작업과 함께 아래 표에 나열된 5가지 주요 반복기 유형이 있습니다.
반복자 | 설명 | 지원되는 컨테이너 | 지원되는 작업 |
|---|---|---|---|
입력 반복자 | 값을 읽는 데 사용되는 단방향 반복자입니다. | 입력 스트림 | 역참조 증분 평등 |
출력 반복자 | It is also a one-way iterator but used to assign the values. 값에 액세스할 수 없습니다. | 출력 스트림 | 역참조(쓰기 전용) 증분 |
순방향 반복자 | 값에 액세스하고 할당할 수 있습니다. 입력 및 출력 반복자의 조합입니다. | 앞으로_목록 unordered_map unordered_set | 역참조 증분 평등 |
양방향 반복자 | 앞으로 또는 뒤로 양방향으로 움직일 수 있습니다. 목록 세트 및 다중 맵과 같은 컨테이너는 양방향 반복자를 지원합니다. | 목록 맵 세트 다중 맵 다중 세트 | 역참조 증가/감소 동일성 |
무작위 액세스 반복자 | 무작위 액세스 반복자는 포인터와 동일한 기능을 제공하기 위해 가리키는 요소에서 멀리 떨어진 요소에 액세스하는 데 사용할 수 있는 반복자입니다. | 벡터 데크 배열 문자열 모니터 크기 찾는 방법 | 모두 |
입력 및 출력 반복자와 별도로 위의 표에서 알 수 있듯이
반복자 어댑터
반복자 어댑터 유형 | 설명 |
|---|---|
역방향 반복자 | |
스트림 반복자 | |
반복자 이동 | 이동 반복자는 STL 알고리즘에 이동 의미를 도입하는 데 사용됩니다. 이동 반복기는 추가 복사본을 만들지 않고 복사된 컨테이너 데이터의 소유권을 복사 컨테이너로 이동합니다. |
삽입자 반복자 | The insertor iterators allows you to insert the given elements at some position in the container. C++에는 세 가지 삽입기 반복자가 있습니다.
이러한 반복자는 다음을 사용하여 만들 수 있습니다. 뒤로 삽입기() 앞_삽입기() 끼워 넣다() C++의 함수. |
C++의 반복자 유틸리티 함수
C++ STL provide the various function to simplify the working with iterators. 아래 표에 나열되어 있습니다.
| 기능 | 설명 | 통사론 |
|---|---|---|
| 표준::고급 | 특정 위치 수만큼 반복기를 전진시킵니다. | 전진 ( 그것 n ) |
| 표준::다음 | 다음 ( 그것 n ) | |
| 표준 :: 이전 | 이전 ( 그것 n ) | |
| 표준::거리 | 거리 ( 그것1 그것2 ) | |
| 표준::시작 | 시작하다 ( 컨테이너 ) | |
| 표준::끝 | 끝 ( 컨테이너 ) | |
| 표준::rbegin | rbegin ( 컨테이너 ) | |
| 표준::렌드 | 만든다 ( 컨테이너 ) | |
| 표준::삽입기 | 컨테이너의 지정된 위치에 요소를 삽입하는 삽입 반복기를 만듭니다. | 삽입기 ( 컨테이너 위치 ) |
| 표준::back_inserter | 컨테이너 끝에 요소를 추가하는 후면 삽입 반복기를 만듭니다. | 뒤로_삽입기 ( 컨테이너 ) |
| 표준::front_inserter | 컨테이너 앞에 요소를 삽입하는 전면 삽입 반복기를 만듭니다. | 앞_삽입기 ( 컨테이너 ) |
예제와 함께 반복자의 응용
반복자는 STL 컨테이너 및 알고리즘으로 작업하는 동안 다양한 목적으로 C++에서 광범위하게 사용됩니다. 다음은 코드 예제와 같은 C++ 반복자의 몇 가지 기본 응용 프로그램입니다.
컨테이너 횡단
STL 컨테이너를 순회하는 것은 반복자의 가장 기본적인 응용 프로그램입니다. 여기서는 start() 및 end() 함수를 사용하여 전체 컨테이너를 순회하는 시작 및 끝 반복자를 가져옵니다. 기본적으로 우리는 시작 반복자가 끝과 같지 않을 때까지 계속 증가시킵니다.
예
C++#include using namespace std; int main() { set<int> s = {10 20 30 40 50}; // Iterator to the beginning // of the set auto it = s.begin(); // Iterating through the // entire set while (it != s.end()) { // Dereferencing iterator // to access value cout << *it << ' '; // Incrementing the // iterator it++; } return 0; }
산출
10 20 30 40 50
위의 코드에서 볼 수 있듯이 세트 컨테이너를 탐색합니다. 마찬가지로 동일한 접근 방식을 사용하여 모든 컨테이너를 탐색할 수 있습니다.
컨테이너 뒤집기
역방향 반복자를 사용하면 역방향을 수동으로 처리할 필요 없이 컨테이너를 끝에서 처음으로 순회할 수 있습니다.
예
C++#include using namespace std; int main() { vector<int> vec = {10 20 30 40 50}; // Defining reverse iterators // pointing to the reverse // beginning of vec auto it = vec.rbegin(); // Iterating the whole // vector in reverse while (it != vec.rend()) { cout << *it << ' '; it++; } return 0; }
산출
50 40 30 20 10
컨테이너 독립적인 알고리즘
반복자를 사용하면 알고리즘이 std::sort() std::find() 및 std::for_each()와 같은 함수를 보다 유연하게 만드는 모든 컨테이너 유형과 작동할 수 있습니다. 실제 컨테이너 대신 반복자를 전달할 수 있습니다.
예
C++#include using namespace std; int main() { vector<int> vec = {30 10 40 10 50}; multiset<int> ms = {10 30 10 20 40 10}; // Using the std::count() algorithm to count // the number of occurences of 10 in vector // and multiset using iterator cout << '10s in Vector: ' << count(vec.begin() vec.end() 10) << endl; cout << '10s in Multiset: ' << count(ms.begin() ms.end() 10); return 0; }
산출
10s in Vector: 2 10s in Multiset: 3
반복자의 추가 응용 프로그램
STL 반복자의 더 많은 응용 프로그램이 있습니다:
- 거리 계산: std::distance() 반복자를 사용하면 컨테이너의 두 위치 사이의 요소 수를 계산하는 데 도움이 됩니다.
- 스트림 반복: 스트림 반복기를 사용하면 입력/출력 스트림을 컨테이너처럼 처리할 수 있으므로 STL 알고리즘을 사용하여 스트림을 더 쉽게 읽고 쓸 수 있습니다.
- STL 알고리즘의 의미 이동: 이동 반복기는 불필요한 복사를 방지하여 성능과 효율성을 높이는 데 도움이 되는 STL 알고리즘의 이동 의미 체계를 도입합니다. 데이터는 이동 의미 규칙에 따라 이동됩니다.
- 데이터 구조를 위한 사용자 정의 반복자: STL 알고리즘 및 기타 여러 기능에 대한 지원을 제공하기 위해 트리 또는 그래프와 같은 STL이 아닌 데이터 구조에 대해 사용자 정의 반복기를 구현할 수 있습니다. 적절한 증가 감소 및 기타 작업을 제공하려면 몇 가지 규칙과 규칙을 따라야 할 수도 있습니다.