이 글에서는 C++ STL의 list::resize() 함수가 어떻게 동작하는지, 그 문법과 실제 예제를 통해 자세히 알아보겠습니다.
STL에서 리스트(List)란?
리스트는 시퀀스 내 어느 위치에서든 상수 시간(constant time)에 삽입과 삭제를 수행할 수 있는 자료구조입니다. C++ STL의 리스트는 이중 연결 리스트(doubly linked list)로 구현되어 있으며, 메모리가 연속적으로 할당되지 않아도 됩니다.
배열(array), 벡터(vector), 데크(deque)와 비교했을 때, 리스트는 컨테이너 내 임의의 위치에서 요소를 삽입·추출·이동하는 작업에서 더 뛰어난 성능을 보입니다. 다만 특정 요소에 직접 접근하는 속도는 느린 편입니다. 리스트는 forward_list와 유사하지만, forward_list는 단일 연결 리스트(singly linked list)이기 때문에 앞쪽 방향으로만 순회할 수 있다는 차이점이 있습니다.
list::resize()란 무엇인가?
list::resize()는 C++ STL에 내장된 함수로, 헤더 파일에 선언되어 있습니다. 이 함수는 리스트 컨테이너의 크기를 조정하는 데 사용되며, 함수 인자로 전달한 개수만큼 컨테이너가 요소를 갖도록 크기를 변경합니다.
문법(Syntax)
list_name.resize(int n);
또는
list_name.resize(int n, const value_type &val);
이 함수는 하나 또는 두 개의 매개변수를 받을 수 있습니다.
매개변수(Parameters)
n − 새로운 컨테이너의 크기(요소 개수)를 정의하는 정수형 값입니다.
val − 컨테이너의 빈 공간을 모두 채우기 위해 복사될 객체입니다. (선택 사항)
반환값(Return value)
이 함수는 아무것도 반환하지 않습니다. 단순히 컨테이너의 크기만 조정합니다.
- 현재 크기보다 n이 클 경우: 부족한 만큼 기본값(또는 지정한 val)으로 새 요소가 추가됩니다.
- 현재 크기보다 n이 작을 경우: 초과분의 요소들이 뒤에서부터 제거됩니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
int main(){
// 리스트 생성
list<int> myList;
// 리스트에 요소 삽입
myList.push_back(1);
myList.push_back(2);
myList.push_back(3);
myList.push_back(4);
// resize 전 리스트의 요소 출력
cout << "List elements are : ";
for (auto i = myList.begin(); i!= myList.end(); i++)
cout << *i << " ";
// 리스트 크기 조정
myList.resize(5);
cout<<"\nList after resize: ";
for (auto i = myList.begin(); i!= myList.end(); i++)
cout << *i << " ";
// 리스트 크기 재조정
myList.resize(6);
cout<<"\nList after resizing it again : ";
for (auto i = myList.begin(); i != myList.end(); i++)
cout << *i << " ";
return 0;
}
실행 결과(Output)
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
List elements are : 1 2 3 4 List after resize : 1 2 3 4 0 List after resizing it again : 1 2 3 4 0 0
결과를 살펴보면, 처음 4개의 요소를 가진 리스트를 resize(5)로 확장하자 기본값인 0이 하나 추가되었고, 다시 resize(6)을 호출하자 0이 하나 더 추가된 것을 확인할 수 있습니다. 이처럼 list::resize()는 두 번째 인자 없이 호출하면 값 타입의 기본 생성값으로 빈 공간을 채웁니다.