template
<
class
Category,
class
T,
class
Distance
=
std::
ptrdiff_t
,
class
Pointer
=
T
*
,
class
Reference
=
T
&
>
struct
iterator
;
|
|
(C++17부터 사용 중단됨)
|
|
|
|
|
std::iterator
는 반복자에 필요한 타입 정의를 간소화하기 위해 제공되는 기본 클래스입니다.
템플릿 매개변수
|
Category
|
-
|
반복자의 카테고리.
iterator category tags
중 하나여야 합니다.
|
|
T
|
-
|
반복자를 역참조하여 얻을 수 있는 값의 타입. 출력 반복자의 경우 이 타입은
void
여야 합니다.
|
|
Distance
|
-
|
반복자 간 거리를 식별하는 데 사용할 수 있는 타입
|
|
Pointer
|
-
|
반복되는 타입(
T
)에 대한 포인터를 정의합니다
|
|
Reference
|
-
|
반복되는 타입(
T
)에 대한 참조를 정의합니다
|
멤버 타입
|
멤버 타입
|
정의
|
iterator_category
|
Category
|
value_type
|
T
|
difference_type
|
Distance
|
pointer
|
Pointer
|
reference
|
Reference
|
예제
다음 예제는 std::iterator를 상속받아
input iterator
를 구현하는 방법을 보여줍니다.
#include <algorithm>
#include <iostream>
template<long FROM, long TO>
class Range
{
public:
// member typedefs provided through inheriting from std::iterator
class iterator : public std::iterator<
std::input_iterator_tag, // iterator_category
long, // value_type
long, // difference_type
const long*, // pointer
long // reference
> {
long num = FROM;
public:
explicit iterator(long _num = 0) : num(_num) {}
iterator& operator++() { num = TO >= FROM ? num + 1: num - 1; return *this; }
iterator operator++(int) { iterator retval = *this; ++(*this); return retval; }
bool operator==(iterator other) const { return num == other.num; }
bool operator!=(iterator other) const { return !(*this == other); }
reference operator*() const { return num; }
};
iterator begin() { return iterator(FROM); }
iterator end() { return iterator(TO >= FROM? TO + 1 : TO - 1); }
};
int main()
{
// std::find requires an input iterator
auto range = Range<15, 25>();
auto itr = std::find(range.begin(), range.end(), 18);
std::cout << *itr << '\n'; // 18
// Range::iterator also satisfies range-based for requirements
for (long l : Range<3, 5>())
std::cout << l << ' '; // 3 4 5
std::cout << '\n';
}
출력:
참고 항목
|
|
반복자의 속성에 대한 통일된 인터페이스를 제공
(클래스 템플릿)
|
|
|
반복자 카테고리를 나타내는 데 사용되는 빈 클래스 타입
(클래스)
|