안녕하세요, 여행벌입니다.

오늘은 C++ STL list에 대해서 정리해보도록 하겠습니다.


list는 순차적인 컨테이너로, 메모리 할당은 vector와 달리 연속적으로 이루어지지 않습니다. 쉽게 비유하면 vector는 배열과 비슷하고 list는 연결 리스트와 비슷합니다. 따라서, 중간에 데이터 삭제와 삽입이 자주 발생하는 경우에는 list STL을 이용하는 것이 훨씬 효율적입니다.

 

#include<list>

using namespace std;

list Library는 다음과 같이 불러올 수 있습니다.

 

list<자료형> 변수명;

해당 자료형을 담을 list를 선언합니다.

 

front()

리스트의 첫 번째 요소의 레퍼런스 값을 반환합니다.

 

back()

리스트의 마지막 요소의 레퍼런스 값을 반환합니다.

 

begin()

리스트의 첫 번째 요소를 가리키는 반복자(iterator)를 반환합니다.

 

end()

end()가 가리키고 있는 것은 back()과 달리 맨 마지막 원소의 바로 다음번 원소이다. begin() 과 마찬가지로 반복자를 반환합니다.

empty()

리스트가 비었으면 true를 아니면 false를 반환합니다.

 

size()

리스트의 크기를 반환합니다.

 

push_front(원소)

리스트의 맨 앞에 원소를 삽입합니다.

 

push_back(원소)

리스트의 맨 뒤에 원소를 삽입합니다.

 

pop_front()

리스트의 맨 앞의 원소를 삭제합니다.

 

pop_back()

리스트의 맨 뒤의 원소를 삭제합니다.

 

resize(int 크기) , resize(int 크기, 초기값)

리스트의 크기를 다시 조정해줍니다. 리스트의 기존 크기가 더 컸다면, 나머지 부분이 삭제가 되고 작았다면 초기값으로 초기화되면서 추가됩니다. 초기값을 주지 않으면 0으로 초기화됩니다.

 

insert(iterator 위치, 원소), insert(iterator 위치, int 개수, 원소)

리스트의 iterator 위치에 원소를 삽입합니다. / 리스트의 iterator 위치에 원소를 입력된 개수만큼 삽입합니다.

 

erase(iterator 위치), erase(iterator 시작위치, iterator 끝위치)

리스트의 iterator 위치의 원소를 삭제합니다. / 리스트의 iterator 시작 위치부터 끝 위치 전까지 원소를 삭제합니다.

 

예시

#include<iostream>
#include<list>

using namespace std;

int main(void) {
	list<int> L;
	for (int i = 1; i <= 10; i++)
		L.push_back(i);
	/* L : 1 2 3 4 5 6 7 8 9 10 */

	cout << L.front() << '\n'; // 1
	cout << L.back() << '\n'; // 10
	cout << *L.begin() << '\n'; // 1
	//cout << *L.end() << '\n'; // error
	cout << L.empty() << '\n'; // 비어있지않으므로 0(false)
	cout << L.size() << '\n'; // 10개의 원소가 있으므로 10 반환
	
	L.pop_front();
	/* L : 2 3 4 5 6 7 8 9 10 */
	L.pop_back();
	/* L : 2 3 4 5 6 7 8 9 */
	L.push_front(1);
	/* L : 1 2 3 4 5 6 7 8 9 */
	L.resize(5);
	/* L : 1 2 3 4 5 */
	L.resize(7, 10);
	/* L : 1 2 3 4 5 10 10 */

	list<int>::iterator it1 = L.begin(), it2 = L.end();
	/* L : 1 2 3 4 5 10 10 */
	/*     ^(it1)          */
	/*                      ^(it2)*/
	it2--; it2--;
	/* L : 1 2 3 4 5 10 10 */
	/*     ^(it1)          */
	/*                ^(it2)*/
	L.erase(it1, it2);
	/* L : 10 10 */
	it1 = L.begin(), it2 = L.end();
	L.insert(it2, 100);
	/* L : 10 10 100*/
	L.insert(it1, 3, 1);
	/* L : 1 1 1 10 10 100 */
}


 

+ Recent posts