CS/자료구조

[자료구조] list 컨테이너_C++

lingk 2020. 12. 16. 20:52

list 컨테이너

#include <list>
template <typename T, class Alloc = allocator<T>> class list;

 

🌀 설명

C++ STL에 포함되어 있는 연결리스트(이중 연결 리스트)를 표현하는 컨테이너.

 

🌀 인자

T : 데이터의 자료형

 

🌀 선언 및 초기화 예시

//1차원 정수형 연결 리스트 선언
std::list<int> l;

//기본 크기가 3인 연결 리스트 선언
std::list<int> l(3);

//기본 크기가 3이고, 모든 노드의 데이터를 2로 초기화
std::list<int> l(3,2);

//l1와 동일한 연결 리스트 선언
std::list<int> l2(l1);

//2차원 정수형 연결 리스트 선언
std::list<std::list<int>> l;

 

🌀 멤버함수 (iterators)

//리스트의 첫번재 노드를 가리티는 반복자를 반환
iterator begin() noexcept;

//리스트의 마지막 노드의 다음을 가리키는 반복자를 반환
iterator end() noexcept;

//리스트를 역으로 했을 때, 그 첫번째 노드를 가리키는 역방향 반복자를 반환
reverse_iterator rbegin() noexcept;

//리스트를 역으로 했을 때, 그 마지막 노드의 다음을 가리키는 역방향 반복자를 반환
reverse_iterator rend() noexcept;

 

🌀 멤버함수 (Capacity)

//리스트의 크기를 반환
size_type size() const noexcept;

//리스트가 비어있음의 여부를 반환
bool empty() noexcept const;

 

🌀 멤버함수 (Element access)

//리스트이 첫번째 노드를 반환
reference front();

//리스트의 마지막 노드를 반환
reference back();

 

🌀 멤버함수 (Modifiers)

//리스트를 n개 노드와 val 값으로 새로 할당
void assign(size_type n, const value_type& val);

//리스트의 첫 노드 이전에 val을 추가
void push_front(const value_type& val);

//리스트의 마지막 노드에 다음 val을 추가
void push)back(const vlaue_type& val);

//리스트의 첫 노드를 삭제
void pop_front();

//리스트의 마지막 노드를 삭제
void pop_back();

//리스트의 지정한 위치의 노드 이전에 val를 추가하고, 그 위치를 가리키는 반복자를 반환
iterator insert(const_iterator position, const value_type& val);

//리스트의 지정한 위치의 노드를 삭제하고, 그 위치를 가리키는 반복자를 반환
iterator erase(const_iterator position);

//리스트의 모든 노드를 삭제
void clear() noexcept;

//리스트의 모든 노드를 리스트 l과 교환
void swap(list& l);

//리스트의 크기를 n으로 변경
//크기가 증가하는 경우에, 추가된 노드를 0으로 초기화
//크기가 감소하는 경우에, 기존의 노드는 유지
void resize(size_type n);

 

🌀 멤버함수 (Operations)

//리스트 l의 모든 노드를 지정한 위치에 삽입
void splice(const_iterator position, list& l);

//리스트에서 val와 동일한 모든 노드를 삭제
void remove(const value_type& vla);

//리스트에서 인접하고 중복되는 노드를 하나를 제외하고 삭제
void unique();

//리스트의 노드가 연결된 순서를 역으로 변경
void reverse();

//리스트의 모든 노드를 오름차순으로 정렬
void sort();

//리스트에 리스트 l의 모든 노드를 merge sort를 수행하여 복사
void merge(list& l);

 

🌀 예시

#include <iostream>
#include <list>

using namespace std;

int main(void) {
    double myDoubles[] = {12.15, 2.72,  73.0, 12.77, 3.14, 12.77, 73.35, 72.25, 15.3, 72.25};
    
    list<double> myList(myDoubles, myDoubles + 10);
    list<double>::iterator it;
    
    cout << ">> nodes of myList: ";
    for(it = myList.begin(); it != myList.end(); ++it)
        cout << *it << " ";
    cout << endl;
    
    cout << "<< myList.push_front(1.4);" << endl;
    myList.push_front(1.4);
    
    cout << "<< myList.push_back(1.4);" << endl;
    myList.push_back(1.4);
    
    cout << ">> nodes of myList: ";
    for(it = myList.begin(); it != myList.end(); ++it)
        cout << *it << " ";
    cout << endl;
    
    cout << "<< myList.sort();" <<endl;
    myList.sort();
    
    cout << ">> nodes of myList: ";
    for(it = myList.begin(); it != myList.end(); ++it)
        cout << *it << " ";
    cout << endl;
    
    myList.unique();
    cout << ">> nodes of myList: ";
    for(it = myList.begin(); it != myList.end(); ++it)
        cout << *it << " ";
    cout << endl;
    
    
    return 0;
}

 

반응형