반복자 범주: 입력, 순방향, 양방향, 임의 접근
반복자 범주를 구분하고 이에 맞는 알고리즘을 선택합니다.
반복자 범주: 입력, 순방향, 양방향, 임의 접근은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
반복자란 무엇입니까
반복자는 일반화된 포인터입니다. 알고리즘은 반복자를 통해 동작하므로, 알고리즘과 기반 컨테이너를 분리할 수 있습니다.
다섯 가지 반복자 범주
반복자는 지원하는 기능에 따라 분류됩니다.
- 입력 — 읽기 전용, 한 번만 순회
- 출력 — 쓰기 전용, 한 번만 순회
- 순방향 — 읽기/쓰기, 여러 번 순회 가능
- 양방향 — 앞뒤로 이동 가능
- 임의 접근 — 정수 오프셋으로 건너뛰기 가능
입력 반복자
한 번 읽고, 이동하고, 반복합니다. 이전 위치로 돌아갈 수 없습니다. 예: std::istream_iterator.
std::istream_iterator<int> in(std::cin), end;
while (in != end) {
std::cout << *in << " ";
++in;
}출력 반복자
쓰기만 수행합니다. 예: std::ostream_iterator와 std::back_inserter.
std::ostream_iterator<int> out(std::cout, " ");
std::vector<int> v = {1, 2, 3};
std::copy(v.begin(), v.end(), out);순방향 반복자
입력 반복자와 비슷하지만 여러 번 순회할 수 있으므로 같은 위치에서 다시 순회할 수 있습니다. 예: std::forward_list.
양방향 반복자
순방향 반복자의 기능에 --가 추가됩니다. 예: std::list, std::map, std::set.
std::list<int> l = {1, 2, 3};
auto it = l.end();
--it; // OK, points to last element임의 접근 반복자
양방향 이동에 더해 건너뛰기가 가능합니다. it + n, it - n, it[k], it1 - it2를 사용할 수 있습니다. 예: std::vector, std::deque, 원시 배열.
알고리즘 요구 사항
각 알고리즘은 필요한 최소 반복자 범주를 지정합니다. std::sort에는 임의 접근이 필요하고, std::find에는 입력 반복자만 필요합니다.
반복자 특성
std::iterator_traits<Iter>는 반복자의 값 형식, 범주 및 기타 속성을 컴파일 시점에 제공합니다.
using Category = std::iterator_traits<It>::iterator_category;
using Value = std::iterator_traits<It>::value_type;std::advance와 std::distance
반복자를 이동하거나 거리를 일반적인 방식으로 측정합니다. 가장 효율적인 구현을 사용하기 위해 반복자 범주를 활용합니다.
auto it = v.begin();
std::advance(it, 5); // efficient on random access, O(n) otherwise
auto d = std::distance(v.begin(), it);사용자 정의 반복자
직접 작성하려면 대상 범주에 필요한 형식 별칭과 연산을 정의해야 합니다. 예를 들어 operator*, operator++, operator== 등이 있습니다.
C++20 반복자 개념
C++20에는 std::input_iterator, std::forward_iterator, std::random_access_iterator와 같은 공식 개념이 추가되었습니다. 이러한 개념은 기존의 태그 기반 시스템을 대체합니다.
빠른 확인
상수 시간에 it + n 표현식을 지원하는 반복자 범주는 무엇입니까?
복습
반복자는 기능에 따라 입력, 출력, 순방향, 양방향, 임의 접근으로 분류됩니다. 알고리즘에는 최소 반복자 범주가 필요합니다. 벡터 반복자는 임의 접근이고, list와 map은 양방향입니다.
자주 묻는 질문
“반복자 범주: 입력, 순방향, 양방향, 임의 접근” 강의는 무료인가요?
네 — “반복자 범주: 입력, 순방향, 양방향, 임의 접근” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“반복자 범주: 입력, 순방향, 양방향, 임의 접근”에서 뭘 배우나요?
반복자 범주를 구분하고 이에 맞는 알고리즘을 선택합니다. 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“반복자 범주: 입력, 순방향, 양방향, 임의 접근” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 반복자 범주: 입력, 순방향, 양방향, 임의 접근
- 일반적인 반복자 패턴: begin, end, advance
- C++20 범위 라이브러리 입문
- 범위 어댑터: views::filter, views::transform, views::take