Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL의 list::front()와 list::back() 함수 완벽 정리

이 글에서는 C++ STL에서 제공하는 list::front()list::back() 함수의 동작 방식, 문법, 그리고 실제 사용 예제를 자세히 알아보겠습니다.

STL에서 List란 무엇인가?

List는 시퀀스 내 임의의 위치에서 상수 시간(constant time)에 삽입과 삭제가 가능한 데이터 구조입니다. List는 이중 연결 리스트(doubly linked list)로 구현되며, 비연속적인 메모리 할당을 허용합니다.

배열(array), 벡터(vector), 덱(deque)과 비교했을 때, List는 컨테이너 내 어떤 위치에서든 요소를 삽입, 추출, 이동하는 작업에서 더 뛰어난 성능을 보입니다. 다만 요소에 직접 접근하는 속도는 느린 편입니다.

List는 forward_list와 유사하지만, forward_list는 단일 연결 리스트(singly linked list)로 구현되어 앞쪽 방향으로만 순회(iteration)할 수 있다는 차이점이 있습니다.

list::front()란?

list::front()는 C++ STL에 내장된 함수로, 헤더 파일에 선언되어 있습니다. 이 함수는 리스트 컨테이너의 첫 번째 요소를 참조하는 데 사용됩니다.

front()는 첫 번째 요소에 대한 직접 참조(direct reference)만을 반환한다는 점이 특징입니다. 반면 list::begin()은 연관된 리스트 컨테이너의 첫 번째 요소를 가리키는 반복자(iterator)를 반환합니다.

문법(Syntax)

mylist.front();

매개변수(Parameters)

이 함수는 매개변수를 받지 않습니다.

사용 예시

입력: list<int> List_container = {10, 11, 13, 15};
      List_container.front();
출력:
      첫 번째 요소 = 10;

반환 값(Return Value)

이 함수는 연관된 리스트 컨테이너의 첫 번째 요소에 대한 참조(reference)를 반환합니다.

예제 코드

#include <iostream>
#include <list>
using namespace std;
int main(){
    list<int> myList = { 10, 20, 30, 40, 50 };
    cout<<"내 리스트의 첫 번째 요소 : "<<myList.front();
    return 0;
}

위 코드를 실행하면 아래와 같은 결과가 출력됩니다.

내 리스트의 첫 번째 요소 : 10

list::back()란?

list::back() 역시 C++ STL에 내장된 함수로, 헤더 파일에 선언되어 있습니다. 이 함수는 리스트 컨테이너의 마지막 요소를 참조하는 데 사용되며, 마지막 요소에 대한 직접 참조를 반환합니다.

주의할 점은, 리스트가 비어 있을 경우 이 함수는 정의되지 않은 동작(undefined behaviour)을 수행한다는 것입니다. 따라서 호출 전에 리스트가 비어 있는지 확인하는 것이 안전합니다.

문법(Syntax)

mylist.back();

매개변수(Parameters)

이 함수는 매개변수를 받지 않습니다.

사용 예시

입력: list<int> List_container = {10, 11, 13, 15};
      List_container.back();
출력:
      마지막 요소 = 15;

반환 값(Return Value)

이 함수는 리스트 컨테이너의 마지막 요소에 대한 참조(reference)를 반환합니다.

예제 코드

#include <iostream>
#include <list>
using namespace std;
int main(){
    list<int> myList = { 10, 20, 30, 40, 50 };
    cout<<"리스트의 마지막 요소 : "<< myList.back();
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

리스트의 마지막 요소 : 50

정리

front()back()은 각각 리스트의 양 끝 요소에 O(1) 시간 복잡도로 접근할 수 있는 편리한 함수입니다. 두 함수 모두 매개변수 없이 호출하며, 참조를 반환하기 때문에 해당 요소의 값을 직접 읽거나 수정할 수도 있습니다. 다만 빈 리스트에 대해 호출하면 정의되지 않은 동작이 발생할 수 있으므로, 필요하다면 empty() 함수로 리스트 상태를 먼저 확인하는 습관을 들이는 것이 좋습니다.