iterators stl
STL의 반복자에 대한 전체 개요.
이 자습서에서는 반복기, 유형, 장점 및 지원하는 다양한 기능에 대한 세부 정보를 살펴 봅니다.
IT 기술 지원 인터뷰 질문 및 답변
반복 자란 무엇입니까? 일반적으로 반복기는 배열이나 컨테이너와 같은 데이터 범위의 특정 요소를 가리키는 모든 개체와 같습니다. 반복자는 C의 포인터와 같습니다.
=> 여기에서 전체 C ++ 교육 시리즈를 찾아보십시오.
학습 내용 :
개요
STL에서 반복기는 증가 연산자 (++) 또는 역 참조 연산자 (*)와 같은 연산자 집합을 사용하여 컨테이너의 요소를 통과하거나 단계별로 이동하는 데 사용할 수있는 개체입니다.
반복기는 컨테이너 내부에 저장된 데이터에 액세스하고 조작하는 것 외에도 알고리즘을 컨테이너에 연결하는 데 중요한 역할을하기 때문에 STL 프로그래밍에서 중요합니다.
반복기 유형
반복기에 의해 구현 된 기능에 따라 다음과 같이 분류됩니다.
- 입력 및 출력 반복기 : 가장 간단한 반복기 유형입니다. 단일 패스를 포함하는 순차적 입출력 작업에 가장 유용합니다.
- 순방향 반복자 : 이들은 입력 반복기와 비슷하지만 방향 즉, 전달 방향의 범위를 가로 지르는 데 사용할 수 있다는 의미에서 전방 방향을 가지고 있습니다. 순방향 반복기가 일정하지 않은 경우 출력 반복기로 사용할 수도 있습니다. 대부분의 표준 STL 컨테이너는 최소한 순방향 반복자를 지원합니다.
- 양방향 반복기 : 이들은 양방향이라는 유일한 차이점을 제외하고 순방향 반복기와 유사합니다. 즉, 이러한 양방향 반복기를 사용하여 앞뒤 방향으로 범위를 순회 할 수 있습니다.
- 랜덤 액세스 반복자 : 랜덤 액세스 반복기는 모든 반복기 중에서 가장 강력합니다. 이들은 비 순차적 반복자입니다. 랜덤 액세스 반복기를 사용하면 각 요소를 순차적으로 통과하지 않고도 현재 값에 오프셋을 적용하여 임의 값에 액세스 할 수 있습니다. C의 포인터와 유사한 속성을 나타냅니다.
한 가지 주목할 점은 모든 STL 컨테이너가 모든 반복자를 지원하는 것은 아니라는 것입니다. 각 컨테이너는 기능 요구 사항에 따라 다른 반복자를 지원합니다.
다음은 다른 반복자를 사용하는 컨테이너 목록입니다.
컨테이너 | 반복자 |
---|---|
지도 | 양방향 |
스택 | 반복자 없음 |
열 | 반복자 없음 |
우선 순위 대기열 | 반복자 없음 |
명부 | 양방향 |
벡터 | 랜덤 액세스 |
과 | 랜덤 액세스 |
멀티 맵 | 양방향 |
세트 | 양방향 |
멀티 세트 | 양방향 |
반복자의 장점
반복기는 특히 다른 범위와 컨테이너를 사용하여 프로그래밍 할 때 매우 유용합니다.
프로그래밍에서 반복기를 사용하는 몇 가지 장점은 다음과 같습니다.
# 1) 코드 재사용 성
반복기를 사용하여 프로그램의 요소에 액세스하는 한, 반복기 정의에서 컨테이너의 이름을 변경하고 컨테이너를 변경해야 할 때마다 유사한 방식으로 나머지 코드를 사용할 수 있습니다.
이는 목록 컨테이너를 사용하여 벡터 컨테이너를 교체하려는 시나리오에서 특히 유용합니다. 반복기 대신 [] 연산자를 사용했다면 컨테이너를 변경할 때 요소에 액세스하는 코드는 쓸모가 없습니다.
# 2) 프로그래밍의 용이성과 편의성
반복자는 컨테이너의 내용을 쉽고 편리하게 탐색하고 액세스하는 데 도움이되는 다양한 내장 기능을 제공합니다.
예를 들어 , 우리는 [] 연산자를 사용하는 동안해야하는 목록이나 배열의 끝을 계속 확인할 필요가 없으며 요소를 추가하고 싶을 때와 같이 프로그램 코드를 변경해야하며 루프를 위해 변경해야합니다. .
반복기를 사용할 때 목록의 끝에 도달했을 때 탭을 유지하지 않고도 반복기의 begin () 및 end () 함수에 직접 액세스 할 수 있으며 루프를 위해 변경할 필요도 없습니다.
# 3) 동적 추가 / 제거
반복기를 사용하는 동안 [] 연산자에서해야하는 것처럼 요소를 이동하지 않고도 컨테이너의 요소를 쉽고 동적으로 추가하거나 제거 할 수 있습니다.
다음 예를 통해이를 시연 해 보겠습니다.
#include #include using namespace std; int main() { vector vec1 = { 1, 1, 2 }; // Declaring an iterator vector::iterator i; // Inserting element for (i = vec1.begin(); i != vec1.end(); ++i) { if (i == vec1.begin()) { i = vec1.insert(i, 3); // insert 3 at the beginning of vec1 } } // contents of vec1 3 1 1 2 cout<<'Vector contents after addition'; cout< 산출:
추가 후 벡터 내용
3 1 1 2
삭제 후 벡터 내용
3 1 2
위의 예에서 볼 수 있듯이 반복자를 사용하면 요소를 이동하고 컨테이너를 재구성하는 복잡한 프로그래밍에 의존 할 필요없이 컨테이너 (이 경우 벡터)에서 요소를 쉽게 추가하거나 제거 할 수 있습니다.
반복자 함수
반복기 자체는 기본 제공 구조이므로 반복기 객체에서 수행 할 수있는 다양한 작업을 지원합니다. 이러한 작업 / 기능을 통해 범위를 효율적으로 탐색하고 컨테이너 내부의 요소를 조작 할 수 있습니다.
이제 반복기가 지원하는 몇 가지 주요 작업을 볼 수 있습니다.
- 시작 : 반복기의 첫 번째 또는 시작 위치를 반환합니다.
- 종료: 반복자의 마지막 위치 또는 '종료 후'위치를 반환합니다.
- 이전 : 인수에 지정된 위치 수를 줄인 후 새 반복기를 반환합니다.
- 다음: 인수에 지정된 위치 수를 늘리거나 늘린 후 새 반복기를 반환합니다.
- 삽입 기 : 컨테이너의 지정된 위치에 요소를 삽입합니다.
- 전진: 반복기 위치를 인수에 지정된 숫자로 증가시킵니다.
다음 프로그램에서이 기능 / 조작의 일부 사용을 시연합니다.
#include #include #include using namespace std; int main() { vector v = { 1, 1,2,3,5 }; // declaring iterators to a vector vector::iterator itr1 = v.begin(); vector::iterator itr2 = v.end(); auto it = next(itr1, 2); // displaying iterator position cout << 'Using next() the new iterator is at: '; cout << *it << ' '; cout << endl; auto it1 = prev(itr2, 2); // displaying iterator position cout << 'The position of new iterator using prev() is: '; cout << *it1 << ' '; cout << endl; //advance advance(itr1,3); // displaying iterator position cout << 'After advance operation,itr1 is positioned at: '; cout << *itr1 << ' '; cout << endl; return 0; }
산출:
next ()를 사용하면 새 반복자는 2에 있습니다.
prev ()를 사용하는 새 반복자의 위치는 다음과 같습니다. 3
진행 작업 후, itr1은 다음 위치에 있습니다. 3
위의 프로그램을 사용하여 다양한 반복기 작업의 사용을 시연했습니다.
결론
따라서 우리는 이터레이터에 대한이 튜토리얼의 끝까지 왔습니다.
지금까지 STL의 기본 사항에 대해 논의했습니다. 다음 튜토리얼부터 STL 컨테이너와 그 프로그래밍을 시작하겠습니다.
=> 여기에서 완전한 C ++ 무료 교육 시리즈를 확인하십시오.
추천 도서