Notice
Recent Posts
Recent Comments
Link
오븐 노트
[C++] list #2 본문
#include <iostream>
using namespace std;
#include <vector>
#include <list>
class Node // 이중 연결 리스트
{
public:
Node* _next;
Node* _prev;
int _data;
};
// 단일 / 이중 / 원형
// list : 연결 리스트
// [] 한칸이 노드의 개념
// [1] -> [2] -> [3] -> [4] -> [5]
// [1] <-> [2] <-> [3] <-> [4] <-> [5]
// [1] <-> [2] <-> [3] <-> [4] <-> [5] <-> [1]
int main()
{
// list (연결 리스트)
// - list의 동작 원리
// - 중간 삽입/삭제
// - 처음/끝 삽입/삭제
// - 임의 접근
list<int> li;
list<int>::iterator itRemember;
for (int i = 0; i < 100; i++)
{
if (i == 50)
{
itRemember = li.insert(li.end(), i);
}
else
{
li.push_back(i);
}
li.push_back(i);
}
//li.push_front(10);
int size = li.size();
//li.capacity(); // vector와 다르게 동적 배열 형태가 아니기 때문에 용량의 개념이 없다.
int first = li.front();
int last = li.back();
//li[3] = 10; // 임의 접근을 허용하지 않음. 한칸씩 이동하여 서치해야하기때문에 비효율적이기 때문.
list<int>::iterator itBegin = li.begin(); // vector의 iterator와는 완전히 다르게 동작
list<int>::iterator itEnd = li.end();
//list<int>::iterator it2 = itBegin + 10; // vector는 메모리 크기를 연산해서 한번에 주소값을 이동 할 수 있어 가능한 연산이지만, list에서는 한칸씩 이동하기에 효율이 떨어져 기능적으로 불가능 한 문법
//list<int>::iterator itTest1 = --itBegin; // 이와 같이 한칸씩 가는 연산은 가능
//list<int>::iterator itTest2 = --itEnd;
//list<int>::iterator itTest3 = ++itEnd;
int* ptrBegin = &(li.front());
int* ptrEnd = &(li.back());
for (list<int>::iterator it = li.begin(); it != li.end(); ++it)
{
cout << *it << endl;
}
//li.insert(itBegin, 100);
//li.erase(li.begin()); // 중간값까지 삭제 가능
//li.pop_front(); // 첫 값 삭제(빼오기)
//li.remove(10); // vector에서는 for문을 돌며 하나씩 삭제를 해야했는데 list는 remove를 지원
// * 임의 접근이 안된다
// * 중간 삽입/삭제 빠르다?
// 50번 인덱스 데이터를 삭제하라
/*list<int>::iterator it = li.begin(); // 서치는 느림. 임의 접근과 삽입/삭제를 다르게 생각해야함.
for (int i = 0; i < 50; i++)
++it;*/
// 임의 접근은 데이터를 하나씩 찾아내는 과정이어서 느리지만,
// 중간 삽입/삭제 할 위치를 기억하고 있다면, 데이터를 삭제하고 next, prev 값만 조정해주면 되므로 빠르다.
// vector는 원소를 밀어내야하지만 list는 노드만 연결하면 되므로 list가 시간복잡도의 우위를 가진다.
li.erase(itRemember);
return 0;
}
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.
모든 글은 제가 공부하기 위해 작성합니다.
참고용
'Develop > C++' 카테고리의 다른 글
[C++] deque (0) | 2023.06.26 |
---|---|
[C++] list #3 (0) | 2023.06.09 |
[C++] list #1 (0) | 2023.06.08 |
[C++] vector #4 (0) | 2023.05.31 |
[C++] vector #3 (0) | 2023.05.29 |