[STL] List 생성, 삽입, 삭제 등 사용법

Notepad96

·

2020. 11. 4. 21:22

300x250

 

 

 


1. list

list는 vector와 deque처럼 상대적인 순서를 유지하는 컨테이너이다.

 

하지만 vector와 deque가 배열 기반이였다면 list는 노드 기반으로서 이중 연결 리스트로 구현되어 있다.

 

 

그래서 vector와 deque와 멤버 함수가 유사하면서도 추가적으로 여러 함수가 더 있다.

 

 

list는 이중 연결 리스트로 구현되어 있기 때문에 vector, deque에서 비효율적이였던 insert()를 사용한 중간 삽입 또한 효율적으로 동작한다. ( 이중 연결 리스트에서는 링크만 바꾸어 주면되므로...)

 

 

 

따라서 상대적인 순서를 유지해야하며 중간에 삽입, 삭제가 빈번하게 발생할 것으로 예상된다면 list 컨테이너를 사용하는 것이 좋다.

 

 

 

 


2. 코 드

환경 : Visual Studio 2019

#include <iostream>
#include <list>
using namespace std;

int main() {

	/* 생성자 */
	list<int> list;
	//list<int> list(4);
	//list<int> list(5, 3);


	/* 삽입, 삭제 */
	list.push_back(5);		// 5
	list.push_front(3);		// 3 5
	list.push_back(2);		// 3 5 2
	list.push_front(4);		// 4 3 5 2
	list.pop_front();		// 3 5 2
	list.pop_back();		// 3 5

	/* 리스트 정렬(greater<int>() : 내림차순) */
	list.sort(greater<int>());

	for (int i : list) {
		cout << i << " ";
	}
	cout << "\n";

	/* 리스트 비우기 */
	list.clear();


	/* 중복된 원소 제거하기 */

	// (1 2 3 4) X 5 번
	for (int i = 0; i < 5; i++) {
		for (int k = 1; k < 5; k++) {
			list.push_back(k);
		}
	}

	list.sort();	// 리스트 정렬하기(기본값 오름차순)
	list.unique();	// 연속하는 중복된 원소 제거
	for (auto i = list.begin(); i != list.end(); i++) {
		cout << *i << " ";
	}
	cout << "\n";

	return 0;
}
 
 
결과
 
 
 

- 삽입, 삭제의 경우 deque처럼 앞뒤로 삽입, 삭제를 할 수 있다.

- list 는  sort() 멤버 함수를 지원하여 정렬을 할 수 있으며, 위의 경우 greater를 사용하여 내림차순으로 정렬하였다.

 
 
 

- unique는 연속되는 중복된 원소를 제거해 주는 함수이다.

- 따라서 해당 리스트에서 중복된 원소를 제거하고자 한다면 정렬을 해준 후 unique를 사용한다면 중복된 원소를 모두 제거할 수 있다.

 
 
 
 

 


3. 참 조

 

 

list - C++ Reference

difference_typea signed integral type, identical to: iterator_traits ::difference_type usually the same as ptrdiff_t

www.cplusplus.com

 

300x250