반응형
List
- 헤더파일: #include <list>
- Vector가 배열 기반이었다면 List는 노드 기반이다.
- 이중 연결리스트로 구현되어 있다.
그렇기에 원소 중간 삽입시에도 효율적이다. (앞/뒤/중간 추가 가능)
▶ 순차 리스트(정적 배열) & 연결 리스트(동적할당) 비교
관련 함수
- push_back(val): 뒤쪽에 val 원소 추가
- pop_back(): 뒤쪽 원소 제거
- push_front(val): 앞쪽에 val 원소 추가
- pop_front(): 앞쪽 원소 제거
- clear(): 리스트 비우기
- sort() : 오름차순으로 정렬 시켜준다.
greater를 사용하면 내림차순 정렬도 가능
- unique(): 연속되는 중복된 원소 제거
중복 원소를 제거하려면 정렬을 먼저한 후 unique 실행해야 한다.
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> list;
list.push_back(1); // [ 1 ]
list.push_front(3); // [ 3, 1]
list.push_back(2); // [ 3, 1, 2]
list.push_front(4); // [ 4, 3, 1, 2]
list.push_back(3); // [ 4, 3, 1, 2, 3]
list.push_back(5); // [ 4, 3, 1, 2, 3, 5]
list.pop_front(); // [ 3, 1, 2, 3, 5]
list.pop_back(); // [ 3, 1, 2, 3]
// 내림차순 정렬
list.sort(greater<int>()); // [3, 3, 2, 1]
for (auto i : list)
{
cout << i << " ";
}
cout << endl;
// 연속하는 중복된 원소 제거
list.unique();
for (auto iter = list.begin(); iter != list.end(); iter++)
{
cout << *iter << " ";
}
cout << endl;
}
연속되지 않은 상태에서 unique() 하는 경우에는
중복 원소가 모두 처리되지 않는 것을 확인할 수 있다.
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> list;
list.push_back(1); list.push_back(1);
list.push_back(3);
list.push_back(1); list.push_back(1);
list.push_back(2);
list.push_back(1); list.push_back(1); list.push_back(1);
for (auto i : list)
{
cout << i << " ";
}
cout << endl;
// ----------------------------------
list.unique();
for (auto i : list)
{
cout << i << " ";
}
cout << endl;
// ----------------------------------
list.sort();
list.unique();
for (auto i : list)
{
cout << i << " ";
}
cout << endl;
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] [STL] bitset (0) | 2021.08.01 |
---|---|
[C++] [STL] Priority_queue (feat. 여러 기준으로 우선순위 큐 구현해보기) (0) | 2021.08.01 |
[C++] [STL] Deque (0) | 2021.07.30 |
[C++] [STL] multiset (0) | 2021.07.30 |
[C++] [STL] Set (0) | 2021.07.29 |
댓글