std:: list
|
헤더 파일에 정의됨
<list>
|
||
|
template
<
class
T,
|
(1) | |
|
namespace
pmr
{
template
<
class
T
>
|
(2) | (C++17부터) |
std::list
는 컨테이너 내 어디에서나 요소의 상수 시간 삽입 및 제거를 지원하는 컨테이너입니다. 빠른 임의 접근은 지원되지 않습니다. 일반적으로 이중 연결 리스트로 구현됩니다.
std::forward_list
와 비교할 때, 이 컨테이너는 공간 효율성이 낮은 대신 양방향 반복 기능을 제공합니다.
리스트 내부 또는 여러 리스트 간에 요소를 추가, 제거 및 이동해도 반복자나 참조는 무효화되지 않습니다. 해당 요소가 삭제될 때만 반복자가 무효화됩니다.
std::list
는
Container
,
AllocatorAwareContainer
,
SequenceContainer
그리고
ReversibleContainer
요구사항을 충족합니다.
std::list
의 모든 멤버 함수는
constexpr
입니다: 상수 표현식 평가에서
std::list
객체를 생성하고 사용하는 것이 가능합니다.
그러나
|
(C++26부터) |
목차 |
템플릿 매개변수
| T | - |
요소의 타입.
|
||||||||||||||
| 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
|
|
||||
const_pointer
|
|
||||
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) |
|
|
(C++23)
|
값의 범위를 컨테이너에 할당합니다
(public member function) |
|
관련 할당자 반환
(public member function) |
|
요소 접근 |
|
|
첫 번째 요소에 접근
(public member function) |
|
|
마지막 요소에 접근
(public member function) |
|
반복자 |
|
|
(C++11)
|
시작 부분에 대한 반복자를 반환합니다
(public member function) |
|
(C++11)
|
끝을 가리키는 반복자를 반환합니다
(public member function) |
|
(C++11)
|
시작 부분으로의 역방향 반복자를 반환합니다
(public member function) |
|
(C++11)
|
역방향 반복자를 끝 부분으로 반환합니다
(public member function) |
용량 |
|
|
컨테이너가 비어 있는지 확인합니다
(public member function) |
|
|
요소의 개수를 반환합니다
(public member function) |
|
|
가능한 최대 요소 개수를 반환합니다
(public member function) |
|
수정자 |
|
|
내용을 지웁니다
(public member function) |
|
|
요소 삽입
(public member function) |
|
|
(C++23)
|
요소 범위를 삽입합니다
(public member function) |
|
(C++11)
|
제자리에서 요소를 생성합니다
(public member function) |
|
요소들을 삭제함
(public member function) |
|
|
끝에 요소를 추가합니다
(public member function) |
|
|
(C++11)
|
끝에 제자리에서 요소를 생성합니다
(public member function) |
|
(C++23)
|
범위의 요소들을 끝에 추가합니다
(public member function) |
|
마지막 요소를 제거합니다
(public member function) |
|
|
요소를 시작 부분에 삽입합니다
(public member function) |
|
|
(C++11)
|
시작 부분에 제자리에서 요소를 생성합니다
(public member function) |
|
(C++23)
|
범위의 요소들을 시작 부분에 추가합니다
(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
로 인스턴스화되는 경우에만 요구됨
|
참고 항목
|
(C++11)
|
단일 연결 리스트
(클래스 템플릿) |