1 분 소요

● <list>

c++에서 제공하는 양방향 연결 리스트를 구현한 컨테이너 클래스이다. 다른 STL 컨테이너와 다르게 Linked List기반의 구조를 가지고 있다. <list>를 사용하면 원소의 삽입, 삭제, 이동 등이 O(1)에 이루어질 수 있으므로 대량의 원소를 삽입, 삭제하는 상황에서 효율적이지만 원소에 접근할 경우 O(n)의 시간이 소요된다..

<list>의 주요 멤버함수

#include <list>

std::list<type> myList;

push_back(value); 	// 리스트의 끝에 원소를 추가
push_front(value);  // 리스트의 앞에 원소를 추가
pop_back();			// 리스트의 끝에 있는 원소를 삭제
pop_front();		// 리스트의 앞에 잇는 원소를 삭제
front();			// 리스트의 첫번째 원소에 접근
back();				// 리스트의 마지막 원소에 접근
begin();			// 리스트의 처음을 가리키는 반복자 반환
end();				// 리스트의 끝을 나타내는 반복자 반환
insert(pos, value); // pos위치에 원소를 삽입
erase(pos);			// pos위치의 원소를 삭제
clear();			// 리스트의 모든 원소 삭제
size();				// 리스트 원소 개수 반환
#include <iostream>
#include <list>

using namespace std;

int main(void)
{
    list<int> myList;
    
    myList.push_back(10);
    myList.push_back(20);
    myList.push_front(5); // {5, 10}

    myList.pop_back();

    cout << "첫번째 원소 : " << myList.front() << endl;
    cout << "마지막 원소 : " << myList.back() << endl;

    for (const auto& element : myList)
    {
        cout << element << ' ';
    }
    cout << endl;

    list<int>::iterator cur = myList.begin();
    myList.insert(++cur, 9999);

    printf("리스트의 원소 : ");
    for (const auto& element : myList)
    {
        cout << element << ' ';
    }
    cout << endl;

    return 0;
}

출력결과

첫번째 원소 : 5
마지막 원소 : 10
5 10
리스트의 원소 : 5 9999 10

2차원 원소(노드, 거리정보)를 연결리스트로 만드는 법

#include <iostream>
#include <vector>
#include <list>

using namespace std;

int main(void)
{
	vector<list<pair<int, int>>> graph(3);

	graph[0].push_back(make_pair(1, 7));
	graph[0].push_back(make_pair(2, 5));

	graph[1].push_back(make_pair(0, 7));
	
	graph[2].push_back(make_pair(0, 5));

	for (int i = 0; i < graph.size(); i++) {
		cout << "Node " << i << ": ";
		for (const auto& edge : graph[i]) {
			cout << "(" << edge.first << ", " << edge.second << ") ";
		}
		cout << '\n';
	}
	return 0;
}

출력결과

Node 0: (1, 7) (2, 5)
Node 1: (0, 7)
Node 2: (0, 5)

댓글남기기