반복자는 컨테이너 안 위치를 가리키는 객체다. 알고리즘은 그 위치의 쌍, 즉 반열린 구간 `[first, last)`를 받아 일한다. 컨테이너를 몰라도 된다.
알고리즘에 맡기기
#include <algorithm>
#include <vector>
std::vector<int> a{3, 1, 2};
std::sort(a.begin(), a.end());
auto it = std::find(a.begin(), a.end(), 2);
if (it != a.end()) {
// *it == 2
}직접 인덱스를 세는 루프보다 `find`, `count`, `copy`, `accumulate`가 의도를 말한다. 조건이 필요하면 다음 편의 람다를 넘긴다.
구간을 벗어나지 않기
알고리즘에 서로 다른 컨테이너의 반복자를 한 쌍으로 넘기면 안 된다. 출력 범위가 입력보다 짧으면 쓴다. 덮어쓸 공간이 없으면 `back_inserter`처럼 추가하는 반복자를 쓴다.
C++20의 `std::span`은 연속 메모리의 포인터와 길이를 함께 넘긴다. 소유하지 않으므로, span이 가리키는 배열이 span보다 오래 살아야 한다. 범위 라이브러리 `std::ranges`는 반복자 쌍 대신 범위를 직접 받는다.
댓글
0개아직 댓글이 없습니다.