C++ vector 컨테이너의 멤버함수 중 insert()와 erase(), clear()에 대해 알아 봅시다
- insert(p, n) - p번째 n을 삽입한다.
- erase(p) - p번째 원소를 삭제한다.
- clear() - 모든 원소를 삭제한다
- vector<int>::iterator it; //반복자생성(아직 원소를 가리키지 않음)
- v.begin() : 컨테이너의 시작 원소를 가리키는 반복자를 반환합니다
- v.end() : 컨테이너의 끝 표시 반복자를 반환합니다.
▶ vector<int>::iterator it; //반복자생성(아직 원소를 가리키지 않음)
▶ 반복자
반복자는 포인터와 비슷하게 동작합니다. 반복자는 컨테이너에 저장된 원소를 순회하고 접근하는 일반화된 방법을 제공합니다. 반복자는 컨테이너와 알고리즘이 하나로 동작하게 묶어주는 인터페이스 역할을 합니다. 이 반복자 덕에 알고리즘은 특정 컨테이너에 종속적이지 않고 독립적이면서도 언제든지 컨테이너와 결합하여 동작할 수 있습니다. 반복자는 개념이 상당히 어려울수 있습니다.
▶ 반복자의 특징
- 반복자는 컨테이너 내부의 원소(객체)를 가리키고 접근할 수 있어야 합니다. (*연산자제공)
- 반복자는 다음 원소로 이동하고 컨테이너의 모든 원소를 순회할 수 있어야 합니다(++ 연산자 제공, !=, == 비교 연산자 제공)
▶ STL에서 컨테이너의 원소(객체)의 집합을 순차열이라 합니다. 순차열 개념은 원소의 순서 있는 집합을 의미합니다. 순차열은 하나의 시작과 하나의 끝을 가집니다. 여기서 반복자는 순차열의 한 원소를 가리킵니다.
▶ STL의 모든 컨테이너는 자신만의 반복자를 제공합니다 멤버함수 begin()과 end()가 순차열의 시작과 끝을 가리키는 반복자를 반환합니다.
▶ 주의할 점은 순차열의 시작과 끝에서 끝은 실제 원소가 아닌 끝을 표시(past-the-end)하는 원소입니다. 이 begin과 end를 구간이라 하며, 수학에서 표기하는 방법을 사용해 반개구간을 [begin, end)처럼 표기합니다.
▶ 사실 순차열은 순서 있는 원소의 집합이므로 구간 [begin, end)뿐만 아니라 [begin, iter)와 구간 [liter, end)도 모두 순차열입니다.
▶ 반복자는 다음과 같이 다섯 범주에 나뉩니다.
- 입력 반복자(input iterator) : 현 위치의 원소를 한 번만 읽을 수 있는 반복자
- 출력 반복자(output iterator) : 현 위치의 원소를 한 번만 쓸 수 있는 반복자
- 순방향 반복자(forward iterator) : 입력, 출력 반복자 기능에 순방향으로 이동(++)이 가능한 재할당될 수 있는 반복자
- 양방향 반복자(bidirectional iterator) ; 순방향 반복자 기능에 역방향으로 이동(--)이 가능한 반복자
- 임의 접근 반복자(randon access iterator) : 양방향 반복자 기능에 +, -, +=, -=, [] 연산이 가능한 반복자
▶ 모든 컨테이너는 양방향 반복자 이상을 제공합니다. 배열 기반 컨테이너인 vecter와 deque는 임의 접근 반복자를 제공합니다.
'C++ STL' 카테고리의 다른 글
10. C++ string 컨테이너 - 10문제 (0) | 2020.04.02 |
---|---|
9. C++ max(), min(), find() - 7문제 (0) | 2020.04.01 |
7. c++ STL [vector 3일차] vector 컨테이너 2 (0) | 2020.04.01 |
6. C++ STL [ vector 2일차 ] vector 컨테이너 (0) | 2020.04.01 |
5. C++ queue 컨테이너 + pair() (0) | 2020.04.01 |