입력 이터레이터
Coddy의 C++ - 표준 템플릿 라이브러리 코스 레슨. 23개 중 14번째.
입력 반복자(Input Iterator)는 컨테이너에서 값을 읽는 데 사용되는 반복자입니다. 입력 반복자는 기능이 제한적이기 때문에 모든 반복자 중에서 가장 "약한" 반복자입니다. 하지만 이로 인해 입력 반복자는 단순하고 이해하기 쉽습니다.
이들은 주로 순차적 입력 작업에 사용되며, 각 값은 반복자에 의해 한 번만 가리켜지고 그 후 반복자가 증가합니다. 대부분의 경우 ++ 연산자를 사용하여 반복자를 하나씩 증가시킵니다.

보시다시피, 순방향 반복자(forward iterator), 양방향 반복자(bidirectional iterator) 및 임의 접근 반복자(random access iterator)는 모두 유효한 입력 반복자입니다.
이제 입력 반복자의 특징에 대해 알아보겠습니다.
- 동등/부등 연산자(Equality/Inequality operator)
입력 반복자는 동등 또는 부등 연산자를 사용하여 비교할 수 있습니다. 두 반복자는 두 반복자가 동일한 위치를 가리키고 있을 때만 같습니다.
A == B // Equality
A != B // Inequality두 반복자가 동일한 위치를 가리키고 있는지 확인하는 예제를 살펴보겠습니다.
vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1, it2;
it1 = numbers.begin();
it2 = numbers.begin() + 1;
if(it1 == it2)
cout << "Both iterators are equal.";
else
cout << "Both iterators are not equal.";Output:
Both iterators are not equal.위의 예제에서 vector<int>::iterator를 사용하여 it1과 it2라는 반복자를 선언했습니다. 그 후 값을 할당했습니다. it1 반복자는 begin() 메서드에 의해 첫 번째 요소의 위치를 가집니다. 그리고 it2 반복자는 begin() 메서드의 값을 하나 증가시켰기 때문에 두 번째 요소의 위치를 가집니다. 그렇기 때문에 프로그램의 출력 결과는 두 반복자가 같지 않다고 나옵니다.
- 역참조(Dereferencing)
입력 반복자는 역참조될 수 있으며, 이는*연산자를 사용하여 수행됩니다. 반복자의 역참조된 값을 출력하면 반복자가 가리키는 요소의 실제 값을 얻게 됩니다.
*A // Dereference with *vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1, it2;
it1 = numbers.begin();
it2 = numbers.begin() + 1;
cout << *it1 << endl;
cout << *it2;Output:
1
2위의 예제는 첫 번째 예제와 정확히 같은 경우입니다. 반복자 it1은 벡터의 첫 번째 요소를 가리키고 반복자 it2는 벡터의 두 번째 요소를 가리킵니다. 반복자의 역참조된 값을 출력하면 벡터의 첫 번째와 두 번째 요소의 실제 값을 얻습니다.
따라서 반복자가 가리키는 변수나 요소의 값을 출력하려면 * 연산자를 사용합니다.
- 증가 가능(Incrementable)
입력 반복자는 증가할 수 있으므로, 증가 후에는 시퀀스의 다음 요소를 참조하게 됩니다. 이를 위해++연산자를 사용합니다.
A++ // Post increment operator
++A // Pre increment operatorvector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1;
it = numbers.begin();
cout << "First value is: " << *it << " ";
it++;
cout << "Second value is: " << *it << " ";
++it;
cout << "Third value is: " << *it;Output:
1 2 3위의 예제에서 반복자 it를 선언하여 벡터의 첫 번째 요소를 가리키게 합니다. 벡터의 첫 번째 요소를 출력한 다음 반복자를 하나 증가시켜 두 번째 요소를 가리키게 하는 식으로 진행합니다.
- 교체 가능(Swappable)
서로 다른 두 위치를 가리키는 두 반복자는 서로 교체될 수 있습니다. 아래와 같이 임시 변수를 사용하여 이를 수행할 수 있습니다.
vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1, it2, temp;
it1 = numbers.begin();
it2 = numbers.begin() + 1;
cout << *it1 << " " << *it2 << endl;
temp = it1;
it1 = it2;
it2 = temp;
cout << *it1 << " " << *it2 << endl;Output:
1 2
2 1위의 예제에서 두 개의 반복자를 선언하고 첫 번째 반복자에는 첫 번째 요소의 위치를, 두 번째 반복자에는 두 번째 요소의 위치를 할당합니다. 두 요소를 출력하고 반복자의 값을 서로 바꿉니다. 출력에서 볼 수 있듯이, 이로 인해 첫 번째 반복자는 두 번째 요소를 가리키고 두 번째 반복자는 첫 번째 요소를 가리키게 됩니다.
챌린지
중급입력으로 주어진 5개의 숫자를 벡터를 사용하여 저장하세요. 그 후, begin() 메서드와 반복자(iterator)를 사용하여 벡터를 순회하며, 매 루프 반복마다 반복자를 증가시키면서 값을 출력하세요.
Input
10
20
30
40
50Output
10 20 30 40 50직접 해보기
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> numbers;
vector<int>::iterator it;
// Enter your code here
for(it = ; it != numbers.end(); )
{
}
return 0;
}C++ - 표준 템플릿 라이브러리의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러