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

예제로 배우는 C++ STL forward_list의 max_size() 함수

이 글에서는 C++ STL에서 forward_list의 max_size() 함수가 어떻게 작동하는지 예제와 함께 살펴보겠습니다.

포워드 리스트(Forward List)란 무엇인가?

포워드 리스트는 단일 연결 리스트(singly linked list)로, 요소를 앞 방향으로만 탐색할 수 있고 뒤 방향으로는 탐색할 수 없습니다. 반면 일반 리스트(list)는 각 요소가 앞쪽 요소와 뒤쪽 요소를 가리키는 두 개의 링크를 가지고 있어 양방향 탐색이 가능합니다. 포워드 리스트는 앞쪽 요소를 가리키는 링크 하나만 유지하면 되기 때문에 더 가볍고 빠르며, 요소의 삽입과 삭제 역시 상수 시간(O(1)) 내에 처리할 수 있습니다.

forward_list::max_size() 함수란?

forward_list::max_size()는 C++ 표준 템플릿 라이브러리(STL)에 포함된 함수로, 시스템 및 라이브러리 구현상의 제약 조건에 따라 해당 포워드 리스트가 담을 수 있는 최대 요소 수를 반환합니다. 이 값은 현재 리스트에 저장된 실제 요소 개수가 아니라 이론상 저장 가능한 최대 크기라는 점에 유의해야 합니다.

구문

forwardlist_name.max_size()

매개변수

이 함수는 어떠한 매개변수도 받지 않습니다.

반환 값

이 함수는 포워드 리스트가 담을 수 있는 최대 요소 수를 size_t 타입의 값으로 반환합니다.

예시

입력 -: 비어 있는 int형 포워드 리스트 생성
출력 -: 포워드 리스트의 최대 크기: 1152921504606846975

아래 프로그램에서 사용된 접근 방식

  • 먼저 포워드 리스트를 초기화합니다.

  • assign() 함수를 사용해 리스트에 값을 추가하고, 필요에 따라 현재 요소들을 출력합니다.

  • C++ 헤더 파일에 정의되어 있는 max_size() 함수를 호출합니다.

  • 포워드 리스트의 최대 크기를 화면에 출력합니다.

예제 1

/*
아래 코드에서는 포워드 리스트를 생성하고 요소를 삽입합니다. 그런 다음 max_size() 함수를 사용하여 요소 삽입 후 포워드 리스트의 최대 크기를 확인하는 것이 과제입니다.
*/

#include <bits/stdc++.h>
using namespace std;
int main() {
    // 포워드 리스트 생성
    forward_list<int> myForwardList;
    // 포워드 리스트에 값 추가
    myForwardList.assign(3, 2);
    cout << "The elements in my forward list are : ";
    for (auto i=myForwardList.begin(); i!=myForwardList.end();i++)
        cout << *i << " ";
    cout << "\nThe size of my Forward List is: " << myForwardList.max_size();
    return 0;
}

출력

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

The elements in my forward list are : 2 2 2
The size of my Forward List is:
1152921504606846975

예제 2

/*
아래 코드에서는 포워드 리스트를 생성합니다. 이번에는 max_size() 함수를 사용하여 비어 있는 포워드 리스트의 최대 크기를 확인하는 것이 과제입니다.
*/

#include <bits/stdc++.h>
using namespace std;
int main() {
    // 포워드 리스트 생성
    forward_list<int> myForwardList;
    cout << "\nsize of my forward list is: "<<myForwardList.max_size();
    return 0;
}

출력

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

size of my forward list is: 1152921504606846975

핵심 정리

출력에 나타난 1152921504606846975라는 매우 큰 숫자는 리스트에 실제로 들어 있는 요소의 개수가 아니라, 시스템 메모리와 라이브러리 구현의 제약 조건 하에서 이론적으로 저장 가능한 최대 요소 수를 의미합니다. 이 값은 운영체제, 컴파일러, 시스템 아키텍처에 따라 달라질 수 있습니다. 한편, forward_list는 단일 연결 리스트의 특성상 전체를 순회하기 전에는 크기를 계산할 수 없기 때문에 size() 멤버 함수를 제공하지 않습니다. 따라서 현재 저장된 실제 요소 개수를 구하려면 distance(myForwardList.begin(), myForwardList.end())를 사용해야 합니다.