이 글에서는 C++ STL에서 list begin()과 list end() 함수가 어떤 기능을 하는지, 그리고 이를 활용해 리스트를 순회하는 방법까지 예제와 함께 자세히 알아보겠습니다.
STL에서 list란 무엇인가?
list는 시퀀스 내 임의의 위치에서 상수 시간(O(1))에 삽입과 삭제가 가능한 자료구조입니다. 내부적으로 이중 연결 리스트(doubly linked list)로 구현되어 있으며, 메모리가 연속적으로 할당되지 않아도 됩니다.
배열(array), 벡터(vector), 덱(deque)에 비해 컨테이너의 어느 위치에서든 요소를 삽입, 추출, 이동하는 작업에서 훨씬 뛰어난 성능을 보입니다. 다만 특정 요소에 직접 접근하는 것은 느린 편입니다. list는 forward_list와 유사하지만, forward_list는 단일 연결 리스트로 앞쪽 방향으로만 순회할 수 있다는 차이가 있습니다.
begin() 함수란?
begin() 함수는 리스트의 첫 번째 요소를 가리키는 반복자(iterator)를 반환합니다.
구문
list_name.begin()
end() 함수란?
end() 함수는 리스트의 마지막 요소 다음 위치(끝 표시자)를 가리키는 반복자를 반환합니다. 즉, 실제 요소가 아닌 리스트의 끝을 나타내는 위치이며, 주로 반복 종료 조건으로 사용됩니다.
구문
list_name.end()
활용 방법
먼저 리스트를 초기화합니다.
begin()과 end()를 정의하여 반복문에서 사용합니다.
위 방식을 활용하면 begin()과 end() 함수로 리스트 전체를 손쉽게 출력할 수 있습니다.
예제 1: 정수 리스트 순회
// STL에서 begin()과 end() 함수의 동작을 보여주는 C++ 코드
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> myList = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
// 리스트 출력
cout << "리스트의 요소: ";
for (auto x = myList.begin(); x != myList.end(); ++x)
cout << *x << " ";
return 0;
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 생성됩니다.
리스트의 요소: 11 12 13 14 15 16 17 18 19 20
예제 2: 문자 리스트 순회
// list의 begin()과 end() 함수의 동작을 보여주는 C++ 코드
#include <iostream>
#include <list>
using namespace std;
int main() {
list<char> myList = { 'D', 'E', 'S', 'I', 'G', 'N' };
// 리스트 출력
cout << "리스트의 요소: ";
for (auto x = myList.begin(); x != myList.end(); ++x)
cout << *x << " ";
return 0;
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 생성됩니다.
리스트의 요소: D E S I G N
정리
begin()은 리스트의 첫 번째 요소를 가리키고, end()는 마지막 요소의 다음 위치를 가리킵니다. 두 함수를 함께 사용하면 반복문을 통해 리스트의 모든 요소를 안전하고 효율적으로 순회할 수 있습니다. 이는 C++ STL에서 리스트를 다룰 때 가장 기본적이면서도 필수적인 패턴이므로 꼭 익혀두시기 바랍니다.