Namespaces
Variants

std:: list

From cppreference.net
헤더 파일에 정의됨 <list>
template <

class T,
class Allocator = std:: allocator < T >

> class list ;
(1)
namespace pmr {

template < class T >
using list = std :: list < T, std:: pmr :: polymorphic_allocator < T >> ;

}
(2) (C++17부터)

std::list 는 컨테이너 내 어디에서나 요소의 상수 시간 삽입 및 제거를 지원하는 컨테이너입니다. 빠른 임의 접근은 지원되지 않습니다. 일반적으로 이중 연결 리스트로 구현됩니다. std::forward_list 와 비교할 때, 이 컨테이너는 공간 효율성이 낮은 대신 양방향 반복 기능을 제공합니다.

리스트 내부 또는 여러 리스트 간에 요소를 추가, 제거 및 이동해도 반복자나 참조는 무효화되지 않습니다. 해당 요소가 삭제될 때만 반복자가 무효화됩니다.

std::list Container , AllocatorAwareContainer , SequenceContainer 그리고 ReversibleContainer 요구사항을 충족합니다.

std::list 의 모든 멤버 함수는 constexpr 입니다: 상수 표현식 평가에서 std::list 객체를 생성하고 사용하는 것이 가능합니다.

그러나 std::list 객체는 일반적으로 constexpr 일 수 없습니다. 동적으로 할당된 저장 공간은 동일한 상수 표현식 평가에서 해제되어야 하기 때문입니다.

(C++26부터)

목차

템플릿 매개변수

T - 요소의 타입.
T CopyConstructible 요구사항을 충족해야 합니다. list::operator= 또는 list::assign T 로 인스턴스화되는 경우, T CopyAssignable 요구사항을 충족해야 합니다. (C++11 이전)
요소에 부과되는 요구사항은 컨테이너에서 수행되는 실제 연산에 따라 달라집니다. 일반적으로 요소 타입이 완전한 타입이어야 하고 Erasable 요구사항을 충족해야 하지만, 많은 멤버 함수들이 더 엄격한 요구사항을 부과합니다. (C++11 이후)
(C++17 이전)

요소에 부과되는 요구사항은 컨테이너에서 수행되는 실제 연산에 따라 달라집니다. 일반적으로 요소 타입이 Erasable 요구사항을 충족해야 하지만, 많은 멤버 함수들이 더 엄격한 요구사항을 부과합니다. 할당자가 할당자 완전성 요구사항 을 충족하는 경우, 이 컨테이너(그러나 그 멤버들은 아님)는 불완전한 요소 타입으로 인스턴스화될 수 있습니다.

기능 테스트 매크로 표준 기능
__cpp_lib_incomplete_container_elements 201505L (C++17) 최소 불완전 타입 지원
(C++17 이후)

Allocator - 메모리를 획득/해제하고 해당 메모리에서 요소를 생성/소멸시키는 데 사용되는 할당자. 이 타입은 Allocator 요구사항을 충족해야 합니다. 동작이 정의되지 않음 (C++20 이전) 프로그램이 ill-formed (C++20 이후) (만약 Allocator::value_type T 와 동일하지 않은 경우).

멤버 타입

멤버 타입 정의
value_type T
allocator_type Allocator
size_type 부호 없는 정수 타입 (일반적으로 std::size_t )
difference_type 부호 있는 정수 타입 (일반적으로 std::ptrdiff_t )
reference value_type &
const_reference const value_type &
pointer

Allocator::pointer

(C++11 이전)

std:: allocator_traits < Allocator > :: pointer

(C++11 이후)
const_pointer

Allocator::const_pointer

(C++11 이전)

std:: allocator_traits < Allocator > :: const_pointer

(C++11 이후)
iterator LegacyBidirectionalIterator ConstexprIterator (C++26 이후) 이며 value_type 를 가리킴
const_iterator LegacyBidirectionalIterator ConstexprIterator (C++26 이후) 이며 const value_type 를 가리킴
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

멤버 함수

list 를 생성합니다
(public member function)
list 를 소멸시킵니다
(public member function)
컨테이너에 값을 할당합니다
(public member function)
컨테이너에 값을 할당합니다
(public member function)
값의 범위를 컨테이너에 할당합니다
(public member function)
관련 할당자 반환
(public member function)
요소 접근
첫 번째 요소에 접근
(public member function)
마지막 요소에 접근
(public member function)
반복자
시작 부분에 대한 반복자를 반환합니다
(public member function)
(C++11)
끝을 가리키는 반복자를 반환합니다
(public member function)
시작 부분으로의 역방향 반복자를 반환합니다
(public member function)
(C++11)
역방향 반복자를 끝 부분으로 반환합니다
(public member function)
용량
컨테이너가 비어 있는지 확인합니다
(public member function)
요소의 개수를 반환합니다
(public member function)
가능한 최대 요소 개수를 반환합니다
(public member function)
수정자
내용을 지웁니다
(public member function)
요소 삽입
(public member function)
요소 범위를 삽입합니다
(public member function)
(C++11)
제자리에서 요소를 생성합니다
(public member function)
요소들을 삭제함
(public member function)
끝에 요소를 추가합니다
(public member function)
끝에 제자리에서 요소를 생성합니다
(public member function)
범위의 요소들을 끝에 추가합니다
(public member function)
마지막 요소를 제거합니다
(public member function)
요소를 시작 부분에 삽입합니다
(public member function)
시작 부분에 제자리에서 요소를 생성합니다
(public member function)
범위의 요소들을 시작 부분에 추가합니다
(public member function)
첫 번째 요소를 제거합니다
(public member function)
저장된 요소의 개수를 변경합니다
(public member function)
내용을 교환합니다
(public member function)
연산
두 개의 정렬된 리스트를 병합합니다
(public member function)
다른 list 로부터 요소들을 전송합니다
(public member function)
특정 조건을 만족하는 요소들을 제거합니다
(public member function)
요소들의 순서를 뒤집습니다
(public member function)
연속된 중복 요소를 제거합니다
(public member function)
요소들을 정렬합니다
(public member function)

비멤버 함수

(C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20에서 제거됨) (C++20)
list 의 값을 사전식으로 비교
(함수 템플릿)
std::swap 알고리즘을 특수화
(함수 템플릿)
특정 조건을 만족하는 모든 요소를 삭제
(함수 템플릿)

추론 가이드

(C++17부터)

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_containers_ranges 202202L (C++23) 컨테이너를 위한 범위 생성 및 삽입
__cpp_lib_constexpr_list 202502L (C++26) constexpr std::list

예제

#include <algorithm>
#include <iostream>
#include <list>
int main()
{
    // 정수를 포함하는 리스트 생성
    std::list<int> l = {7, 5, 16, 8};
    // 리스트의 앞에 정수 추가
    l.push_front(25);
    // 리스트의 뒤에 정수 추가
    l.push_back(13);
    // 검색을 통해 16 앞에 정수 삽입
    auto it = std::find(l.begin(), l.end(), 16);
    if (it != l.end())
        l.insert(it, 42);
    // 리스트 출력
    std::cout << "l = { ";
    for (int n : l)
        std::cout << n << ", ";
    std::cout << "};\n";
}

출력:

l = { 25, 7, 5, 42, 16, 8, 13, };

결함 보고서

다음 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 230 C++98 T CopyConstructible 요구사항을 만족할 필요가 없었음
( T 타입의 요소가 생성되지 못할 수 있었음)
T
CopyConstructible 요구사항을 추가로 만족해야 함
LWG 276 C++98 T 가 항상 CopyAssignable 요구사항을 만족해야 했음 operator= 또는
assign T 로 인스턴스화되는 경우에만 요구됨

참고 항목

단일 연결 리스트
(클래스 템플릿)