Iterator(반복자) ??
- 복합 객체의 내부 구조를 노출하지 않고 , 동일한 방법으로 순차적으로 이동할 수 있는 방법을 제공
#include <iostream> #include <vector> #include <list> int main() { std::list<int> s = { 1,2,3,4,5 }; std::vector<int> v = { 1,2,3,4,5 }; auto p1 = s.begin(); auto p2 = v.begin(); while (p1 != s.end()) { std::cout << &(*p1) << std::endl; ++p1; } std::cout << "====================================\n\n"; while (p2 != v.end()) { std::cout << &(*p2) << std::endl; ++p2; } }
여기서 list와 vector에 대해서 볼껀데,
여기서 p1과 p2는 List와 Vector의 iterator 객체가 된다.
p1 iterator 에는 list의 첫 번째 요소(1)의 메모리 주소 값이 있을 것이다.
여기서 ++p1을 처리해주면 두 번째 요소(2)의 메모리 주소값이 iterator 객체에 기록되게 된다.
여기서 만약 &(p1)은 iterator 객체의 주소이다 => list나 vector 요소들에 대한 메모리 주소가 아님.
list나 vector의 요소들에 대해서 메모리 주소가 알고 싶으면 &(*p1) 이렇게 처리를 해주는 것이 맞다.
list는 연속하지 않은 메모리 들이 ㅇ----------------ㅇ--------ㅇ------------ㅇ------ㅇ 이렇게 연결되어 있는 구조라면
Vector는 연속한 메모리 들이 ㅁㅁㅁㅁㅁ 이렇게 붙어있는 구조이다.
그래서 iterator 들을 ++ 시키면서 메모리 주소가 어떻게 되는지에 대해 알아보았다.

List의 메모리들을 보면은 불규칙적이라는 것을 알 수 있고, vector를 보면 메모리가 (int) 4byte만큼 꾸준히 증가함을 보임.
single linked list를 만들어 보려고 하는데
#include <iostream> template<typename T> struct Node { T data; Node* next; Node(const T& d, Node* n) : data(d), next(n) {} }; template<typename T> struct slist { Node<T>* head = 0; public: void push_front(const T& a) { head = new Node<T>(a, head); } }; int main() { slist<int> s; s.push_front(10); s.push_front(20); s.push_front(30); s.push_front(40); }
List는 Node 들이 쭉쭉쭉쭉 연결되어 있다고 생각하면 된다.
Node는 Data와, 다음에 있을 노드의 메모리 주소를 나타낸다.
10이 제일 먼저 들어가는데, 이 Node는 Data는 10 , head는 null 이고, head의 값은 이 Node 의 주소 값으로 갱신된다.
20은 두 번째로 들어가는데, 이 Node는 Data는 20 , head는 이전 노드의 메모리 주소이고, head의 값은 (20)의 Node 의 주소 값으로 갱신된다.
[40, 30의 메모리 주소] => [ 30, 20의 메모리 주소] => [20,10의 메모리주소] => [10, null] 이런식으로 되는 것이다
iterator가 begin 부분말 알면 next의 주소를 따라서 쭉쭉 이동하면 결국 끝까지 이동할 수 있는 것이다.
'Programming > c++ Design Pattern' 카테고리의 다른 글
[C++ Design Pattern] Visitor (1) | 2023.12.01 |
---|---|
[C++ Design patter] Factory. (1) | 2023.11.30 |
[C++ Design Pattern] Flyweight (1) | 2023.11.30 |
[C++ Design Pattern] Adapter (0) | 2023.11.30 |
[C++ Design Pattern] Decorator (0) | 2023.11.29 |