표준::목록 C++ 예와 함께
std::list란 무엇입니까?
In C++에서 std::list는 스토리지 컨테이너를 나타냅니다. std:list를 사용하면 어디에서나 항목을 삽입하고 제거할 수 있습니다. std::list는 이중 연결 목록으로 구현됩니다. 이는 목록 데이터에 양방향 및 순차적으로 액세스할 수 있음을 의미합니다.
표준 템플릿 라이브러리 목록은 빠른 임의 액세스를 지원하지 않지만 모든 방향에서 순차적 액세스를 지원합니다.
다양한 메모리 청크에 목록 요소를 분산시킬 수 있습니다. 데이터에 대한 순차적 접근에 필요한 정보는 컨테이너에 저장됩니다. std::list는 런타임 중에 필요에 따라 양쪽 끝에서 확장 및 축소될 수 있습니다. 내부 할당자는 스토리지 요구 사항을 자동으로 충족합니다.
std::list를 사용하는 이유는 무엇입니까?
std::List를 사용하는 이유는 다음과 같습니다.
- std::list는 배열 및 벡터와 같은 다른 시퀀스 컨테이너와 더 잘 비교됩니다.
- 모든 위치에서 요소를 삽입, 이동 및 추출하는 데 더 나은 성능을 제공합니다.
- std::list는 이러한 작업을 집중적으로 수행하는 알고리즘에서도 더 나은 성능을 발휘합니다.
목록 구문
std::list를 정의하려면 다음을 가져와야 합니다. 헤더 파일. 다음은 std::list 정의 구문입니다.
template < class Type, class Alloc =allocator<T> > class list;
위의 매개변수에 대한 설명은 다음과 같습니다.
- T - 포함된 요소의 유형을 정의합니다. 사용자 정의 유형을 포함하여 모든 데이터 유형으로 T를 대체할 수 있습니다.
- Alloc – 할당자 개체의 유형을 정의합니다. 이는 기본적으로 할당자 클래스 템플릿을 사용합니다. 값에 따라 다르며 간단한 메모리 할당 모델을 사용합니다.
실시 예 1
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; for (int x : my_list) { std::cout << x << '\n'; } }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 알고리즘 헤더 파일을 포함하십시오.
- 해당 기능을 사용하려면 iostream 헤더 파일을 포함하십시오.
- 해당 기능을 사용하려면 목록 헤더 파일을 포함하십시오.
- main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가되어야 합니다.
- 4개의 정수 집합을 사용하여 my_list라는 목록을 만듭니다.
- for 루프를 사용하여 루프 변수 x를 만듭니다. 이 변수는 목록 요소를 반복하는 데 사용됩니다.
- 콘솔에 목록의 값을 인쇄합니다.
- 본체의 끝 for 루프.
- main() 함수 본문의 끝입니다.
C++ 기능 나열
일반적인 std::list 함수는 다음과 같습니다.
함수 | 상품 설명 |
---|---|
끼워 넣다() | 이 함수는 반복자가 가리키는 위치 앞에 새 항목을 삽입합니다. |
푸시백() | 이 함수는 목록 끝에 새 항목을 추가합니다. |
push_front() | 목록 앞에 새 항목을 추가합니다. |
팝프론트() | 목록의 첫 번째 항목을 삭제합니다. |
크기() | 이 함수는 목록 요소의 수를 결정합니다. |
앞쪽() | 목록의 첫 번째 항목을 결정합니다. |
뒤쪽에() | 목록의 마지막 항목을 결정합니다. |
역전() | 목록 항목을 반전시킵니다. |
병합() | 두 개의 정렬된 목록을 병합합니다. |
생성자
여기에 기능 에 의해 제공 헤더 파일:
- 기본 생성자 std::list::list() - 요소가 XNUMX개인 빈 목록을 만듭니다.
- 채우기 생성자 std::list::list() - n개의 요소가 포함된 목록을 만들고 각 요소에 0 값을 할당합니다.
- 범위 생성자 std::list::list() - 처음부터 마지막까지의 범위에 있는 많은 요소가 포함된 목록을 만듭니다.
- 복사 생성자 std::list::list()- 기존 목록에 포함된 각 요소의 복사본을 사용하여 목록을 만듭니다.
- 이동 생성자 std::list::list() - 이동 의미를 사용하여 다른 목록의 요소로 목록을 만듭니다.
- 초기화 목록 생성자 std::list::list() - 이동 의미를 사용하여 다른 목록의 요소로 목록을 만듭니다.
예제 2
#include <iostream> #include <list> using namespace std; int main(void) { list<int> l; list<int> l1 = { 10, 20, 30 }; list<int> l2(l1.begin(), l1.end()); list<int> l3(move(l1)); cout << "Size of list l: " << l.size() << endl; cout << "List l2 contents: " << endl; for (auto it = l2.begin(); it != l2.end(); ++it) cout << *it << endl; cout << "List l3 contents: " << endl; for (auto it = l3.begin(); it != l3.end(); ++it) cout << *it << endl; return 0; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 iostream 헤더 파일을 포함하십시오.
- 해당 기능을 사용하려면 목록 헤더 파일을 포함하십시오.
- 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
- main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가되어야 합니다.
- l이라는 빈 목록을 만듭니다.
- 1개의 정수 집합으로 l3이라는 목록을 만듭니다.
- 처음부터 끝까지 l2이라는 목록의 모든 요소를 포함하는 l1라는 목록을 만듭니다.
- 이동 의미론을 사용하여 l3이라는 목록을 만듭니다. 목록 l3은 목록 l2와 동일한 내용을 갖습니다.
- 다른 텍스트와 함께 콘솔에 l이라는 목록의 크기를 인쇄합니다.
- 콘솔에 일부 텍스트를 인쇄합니다.
- iterator라는 이름의 반복자를 만들고 이를 사용하여 l2라는 목록의 요소를 반복합니다.
- 콘솔에 l2라는 목록의 요소를 인쇄합니다.
- 콘솔에 일부 텍스트를 인쇄합니다.
- iterator라는 이름의 반복자를 만들고 이를 사용하여 l3라는 목록의 요소를 반복합니다.
- 콘솔에 l3라는 목록의 요소를 인쇄합니다.
- 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
- main() 함수 본문의 끝입니다.
컨테이너 속성
컨테이너 속성 목록은 다음과 같습니다.
부동산 | 상품 설명 |
---|---|
순서 | 시퀀스 컨테이너는 요소를 엄격한 선형 순서로 정렬합니다. 요소는 시퀀스의 위치에 따라 액세스됩니다. |
이중 연결 목록 | 모든 요소에는 이전 및 다음 요소를 찾는 방법에 대한 정보가 있습니다. 이를 통해 삽입 및 삭제 작업에 일정한 시간을 할애할 수 있습니다. |
할당자 인식 | 할당자 개체는 저장소 크기를 동적으로 수정하는 데 사용됩니다. |
목록에 삽입
목록에 값을 삽입하는 데 사용할 수 있는 다양한 함수가 있습니다. 이것을 보여드리겠습니다:
예제 3
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; my_list.push_front(11); my_list.push_back(18); auto it = std::find(my_list.begin(), my_list.end(), 10); if (it != my_list.end()) { my_list.insert(it, 21); } for (int x : my_list) { std::cout << x << '\n'; } }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 알고리즘 헤더 파일을 포함하십시오.
- 해당 기능을 사용하려면 iostream 헤더 파일을 포함하십시오.
- 해당 기능을 사용하려면 목록 헤더 파일을 포함하십시오.
- main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가되어야 합니다.
- 4개의 정수 집합을 사용하여 my_list라는 목록을 만듭니다.
- my_list라는 목록 앞에 요소 11을 삽입합니다.
- my_list라는 목록의 끝에 요소 18을 삽입합니다.
- iterator를 생성하고 이를 사용하여 my_list 목록에서 요소 10을 찾습니다.
- if 문을 사용하여 위 요소가 발견되었는지 여부를 확인합니다.
- 요소 21이 발견된 경우 위 요소 앞에 요소 XNUMX을 삽입합니다.
- if 문의 본문 끝입니다.
- for 루프를 사용하여 루프 변수 x를 만듭니다. 이 변수는 목록 요소를 반복하는 데 사용됩니다.
- 콘솔에 목록의 값을 인쇄합니다.
- for 루프 본문의 끝입니다.
- main() 함수 본문의 끝입니다.
목록에서 삭제
목록에서 항목을 삭제할 수 있습니다. erasure() 함수를 사용하면 목록에서 항목이나 항목 범위를 삭제할 수 있습니다.
- 단일 항목을 삭제하려면 하나의 정수 위치를 전달하기만 하면 됩니다. 항목이 삭제됩니다.
- 범위를 삭제하려면 시작 및 종료 반복자를 전달합니다. 이것을 보여드리겠습니다.
예제 4
#include <algorithm> #include <iostream> #include <list> using namespace std; int main() { std::list<int> my_list = { 12, 5, 10, 9 }; cout << "List elements before deletion: "; for (int x : my_list) { std::cout << x << '\n'; } list<int>::iterator i = my_list.begin(); my_list.erase(i); cout << "\nList elements after deletion: "; for (int x : my_list) { std::cout << x << '\n'; } return 0; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 알고리즘 헤더 파일을 포함하십시오.
- 해당 기능을 사용하려면 iostream 헤더 파일을 포함하십시오.
- 해당 기능을 사용하려면 목록 헤더 파일을 포함하십시오.
- 클래스를 호출하지 않고 사용하려면 프로그램에 std 네임스페이스를 포함하세요.
- main() 함수를 호출합니다. 프로그램 로직은 이 함수의 본문 내에 추가되어야 합니다.
- 4개의 정수 집합을 사용하여 my_list라는 목록을 만듭니다.
- 콘솔에 일부 텍스트를 인쇄합니다.
- for 루프를 사용하여 루프 변수 x를 만듭니다. 이 변수는 목록 요소를 반복하는 데 사용됩니다.
- 콘솔에 목록의 값을 인쇄합니다.
- for 루프 본문의 끝입니다.
- 목록의 첫 번째 요소를 가리키는 반복자 i를 만듭니다.
- 반복자 i가 가리키는 지우기() 함수를 사용합니다.
- 콘솔에 일부 텍스트를 인쇄합니다.
- for 루프를 사용하여 루프 변수 x를 만듭니다. 이 변수는 목록 요소를 반복하는 데 사용됩니다.
- 콘솔에 목록의 값을 인쇄합니다. 삭제 후에 발생합니다.
- for 루프 본문의 끝입니다.
- 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
- main() 함수 본문의 끝입니다.
요약
- std::list는 저장 컨테이너입니다.
- 언제 어디서나 항목을 삽입하고 삭제할 수 있습니다.
- 이중 링크로 구현됩니다.
- std::list 데이터는 양방향 및 순차적으로 액세스할 수 있습니다.
- std::list는 빠른 무작위 액세스를 지원하지 않습니다. 그러나 모든 방향에서의 순차적 액세스를 지원합니다.
- std::list의 목록 요소를 다른 메모리 청크에 분산시킬 수 있습니다.
- 런타임 중에 필요에 따라 양쪽 끝에서 std::list를 축소하거나 확장할 수 있습니다.
- std::list에 항목을 삽입하려면 insert() 함수를 사용합니다.
- std::list에서 항목을 삭제하려면 erasure() 함수를 사용합니다.