list 컨테이너
list는 헤더파일 <list>에 정의된 순차 컨테이너의 한 종류로 원소들을 메모리 상에 선형으로 배열된다.
list 컨테이너는 이중 연결 리스트로 구현되는데 이중 연결 리스트를 이용하면 메모리 상의 임의의 위치에 원소를 저장하더라도 참조를 할 수 있게 된다. 왜냐하면 어떤 원소의 위치는 이전 원소와 다음 원소의 링크를 통해 따라서 추적해 나갈 수 있기 때문이다.
vector, deque와 비교했을 때, list는 원소의 삽입, 삭제, 그리고 컨테이너 내부에서의 원소들 간의 이동이 매우 효율적이다. 따라서 정렬 알고리즘처럼 원소의 이동이 빈번하게 일어나는 곳에 적용하면 효율적이다.
생성자
1. list()
- 빈 컨테이너를 생성한다.
2. explicit list (size_type n, const allocator_type& alloc = allocator_type());
- n을 요소로 갖는 컨테이너를 생성한다.
3. template <class InputIterator> list (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());
- [첫번째, 마지막]까지의 요소를 갖는 컨테이너를 생성한다.
4. list (const list& x);
- 각각 x의 요소와 함께 복사한다.
5. list (list&& x);
- x개의 요소를 가져오는 컨테이너를 생서성한다.
6. list (initializer_list<value_type> il, const allocator_type& alloc = allocator_type());
- 각각의 요소를 순서대로 복사해 컨테이너를 생성한다.
멤버 함수
1. lt.assign(n,x)
- lt에 x 값으로 n개의 원소를 할당한다
2. lt.assign(b,e)
- lt를 반복자 구간 [b,e)로 할당한다.
3. lt.back()
- lt의 마지막 원소를 참조한다.
4. p=lt.begin() p는
- lt의 첫 원소를 가리키는 반복자다
5. lt.clear()
- lt의 모든 원소를 제거한다.
6. lt.empty()
- lt가 비었는지 조사한다
7. p=lt.end()
- p는 lt의 끝을 표식하는 반복자다
8. q=lt.erase(p)
- p가 가리키는 원소를 제거한다. q는 다음 원소를 가리킨다
9. q= lt.erase(b,e)
- 반복자 구간 [b,e)의 모든 원소를 제거한다. q는 다음 원소다
10. lt.front()
- lt의 첫 번째 원소를 참조한다
int main()
{
std::list<int> list;
list.push_back(1);
list.push_back(2);
list.push_back(3);
list.clear();
std::cout<<list.empty()<<std::endl;
}
/*
출력값:
1
*/
int main()
{
std:: list <int> list;
list.push_back(1);
list.push_back(2);
int a = list.back();
std::cout << a;
return 0;
}
/*
출력값:
2
*/
int main()
{
std:: list <int> list;
list.push_back(1);
list.push_back(2);;
std::cout << list.size();
return 0;
}
/*
출력값:
2
*/