728x90
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=257288899
코딩 테스트를 위한 자료 구조와 알고리즘 with C++
C++ 자료 구조부터 그리디 알고리즘, 분할 정복 알고리즘, 그래프 알고리즘, 동적 계획법과 같은 다양한 알고리즘을 설명한다. 또한, 전통적인 자료 구조와 C++ STL 클래스 구현 사이의 관계를 설명
www.aladin.co.kr
본 책을 사용하여 공부하는 내용이고 해당 글은 상업적으로 배포하고자 하지 않고 개인 공부용입니다
- 포인터와 비슷한 주소 비스무리한 그걸 반복자라고 함
- STL 컨테이너에 대해 공통의 인터페이스를 제공함
- 벡터와 배열에서 사용되는 반복자는 기능 면에서 가장 유연함
- 벡터와 배열은 연속된 자료 구조를 사용하기 때문에 특정 위치의 원소에 곧바로 접근할 수 있음, 이러한 경우 임의 접근 반복자(random access iterator)라고 부름
- 한편, 기본적으로 forward_list는 역방향 긴응을 제공하지 않아서 이전 노드로 돌아가려면 -가 아니라 맨 처음 노드부터 시작해서 찾아가야 함
- 이렇게 역방향을 지원하지 않는 증가 연산만 가능한 반복자를 순방향 반복자(forward iterator)라고 함
- 반복자 타입에 따라서 advance, next, prev 함수가 있는데 주의할 점은 해당 반복자가 지원할 경우에만 동작한다는 점
- 그러니까, 순방향으로만 이동이 가능한 순방향 반복자에 대해서 prev( ) 함수를 사용하는 에러가 발생함
반복자 예제
#include <iostream>
#include <forward_list>
#include <vector>
int main()
{
std::vector<std::string> vec = {
"Lewis Hamilton", "Lewis Hamilton", "Nico Roseberg", "Sebastian Vettel", "Lewis Hamilton", "Sebastian Vettel", "Sebastian Vettel", "Sebastian Vettel", "Fernando Alonso"
};
auto it = vec.begin(); // 상수 시간
std::cout << "가장 최근 우승자: " << *it << std::endl;
//Lewis Hamilon
it += 8; // 상수 시간
std::cout << "8년 전 우승자: " << *it << std::endl;
// Fernando Alonso
advance(it, -3); // 상수 시간
std::cout << "그후 3년 뒤 우승자: " << *it << std::endl;
//Sebastian Vettel
}
솔직히 좀 쉬움
std::forward_list<std::string> fwd(vec.begin(), vec.end());
auto it1 = fwd.begin();
std::cout << "가장 최근 우승자: " << *it1 << std::endl;
advance(it1, 5); // 선형 시간
std::cout << "5년 전 우승자: " << *it1 << std::endl;
// std::forward_list는 순방향으로만 이동할 수 있으므로
// 아래 코드는 에러가 발생합니다.
// advance(it1, -2);
}
참고참고
728x90
'IE & SWCON > Data Structure (C++)' 카테고리의 다른 글
list (0) | 2024.02.14 |
---|---|
forward_list (1) | 2024.02.14 |
vector (2) | 2024.02.07 |
array class (1) | 2024.02.07 |
연속된 자료 구조와 연결된 자료구조 (1) | 2024.02.07 |