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 |