What's Iterator?
Container를 순회하는 포인터.
When To Use?
- Convenient Programming
loop without [] operator or minding 'range' - Reusabililty
we can reuse iterator when to change data container - Dynamic add & remove
(1) ⭐ 범위 신경쓰기 싫다. index 극혐이다.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// Declaring a vector
vector<int> v = { 1, 2, 3 };
// Declaring an iterator
vector<int>::iterator i;
int j;
cout << "Without iterators = ";
// Accessing the elements without using iterators
for (j = 0; j < 3; ++j)
{
cout << v[j] << " ";
}
cout << "\nWith iterators = ";
// Accessing the elements using iterators
for (i = v.begin(); i != v.end(); ++i)
{
cout << *i << " ";
}
// Adding one more element to vector
v.emplace_back(4);
cout << "\nWithout iterators = ";
// Accessing the elements without using iterators
for (j = 0; j < 4; ++j)
{
cout << v[j] << " ";
}
cout << "\nWith iterators = ";
// Accessing the elements using iterators
for (i = v.begin(); i != v.end(); ++i)
{
cout << *i << " ";
}
return 0;
}
(2) 컨테이너 바꿔도 그대로 사용 가능해요
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main()
{
vector<int> v = { 1, 2, 3 };
list<int> list;
list.assign(3, 3);
// 백터든 리스트든 auto iterator 선언으로 잘돌아간다.
// 만약 백터를 [] operator 그리고 index로 순회하면
// list는 [] operator, index-based access가 불가능하기 때문에
// 코드를 바꿔야 한다 -ㅅ-
for (auto itr = v.begin(); itr != v.end(); ++itr)
{
cout << *itr << " ";
}
cout << endl;
for (auto itr = list.begin(); itr != list.end(); ++itr)
{
cout << *itr << " ";
}
return 0;
}
(3) 돌아다니면서 지우고 난리 부르스 피울 수 있어요.
index로 접근하면서 특정 원소를 지우거나 추가하려면 모든 원소를 땅기거나 밀면서 index 컨트롤이 필요해져요.
그런거 신경쓰지 않아도 되요.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// Declaring a vector
vector<int> v = { 1, 2, 3 };
// Declaring an iterator
vector<int>::iterator i;
int j;
// Inserting element using iterators
for (i = v.begin(); i != v.end(); ++i) {
if (i == v.begin()) {
i = v.insert(i, 5);
// inserting 5 at the beginning of v
}
}
// v contains 5 1 2 3
// Deleting a element using iterators
for (i = v.begin(); i != v.end(); ++i) {
if (i == v.begin() + 1) {
i = v.erase(i);
// i now points to the element after the
// deleted element
}
}
// v contains 5 2 3
// Accessing the elements using iterators
for (i = v.begin(); i != v.end(); ++i) {
cout << *i << " ";
}
return 0;
}
Reference
'Algorithm > Algorithm (문제풀이)' 카테고리의 다른 글
[백준 11651] 좌표 정렬하기 2 (0) | 2021.02.21 |
---|---|
[Geeks for Geeks] Validate an IP Address (0) | 2021.02.20 |
[Geeks For Geeks] Reverse words in a given String (0) | 2021.02.18 |
[Geeks For Geeks] Reverse a String (0) | 2021.02.18 |
[GeeksForGeeks] Prim (0) | 2021.02.08 |