STL은 표준 라이브러리로 컨테이너, 반복자, 알고리즘으로 구성되어 있다.
순차 컨테이너
1. vector
생성
vector<int> v1;
vector<int> v1(10, -1)
vector<int> v1 {1,2,3,4,5}
복제와 대입
vector<int> intVector(10,0);
intVector.assign(5, 100);
intVector.assign({1,2,3,4});
항목 룩업
기본적인 룩업 방법은 []연산자이다.
그 외에는 아래와 같다.
v.at(3)
v.frond() // 첫번째 항목
v.back() // 마지막 항목
반복자
반복자란 컨테이너의 항목들에 접근하기 위한 포인터 객체이다.
아래와 같이 사용한다.
vector.begin() // 가장 앞
vector.end() // 가장 뒤
기본 사용은 위와 같지만 댕글링 포인터 등의 버그에 취약하여 사용 시 유의해야 한다.
항목 삽입/삭제
- 삽입
vector.push_back(10)
vector.insert(v.begin(), 10)
위와 같이 push_back()은 가장 뒤에 넣는 것이고 insert는 임의의 위치에 항목을 삽입한다.
또한 insert는 아래와 같이 여러 항목을 동시에 삽입할 수 있다.
vector<int> v {1,1,1,1,1};
v.insert(v.begin(), 2);//{2,1,1,1,1,1}
v.insert(v.begin() + 2, 2, 3); //{2,1,3,3,1,1,1,1}
v.insert(v.end(), {4,5}); //{2,1,3,3,1,1,1,1,4,5}
emplace_back과 emplace는 항목을 생성하기 위한 인자를 직접 전달하여 내부에 항목이 생성될 수 있게 한다.
또한 생성 비용만 지불하기에 push_back과 insert보다 더 효율적이다.
v.emplace_back(1, 2); //v.push_back(point{1,2})와 같은 결과
v.emplace(v.begin(), 3, 4); //v.insert(v.begin(), point{1, 2})와 같은 결과
- 삭제
모든 항목을 삭제할 때는 clear()를 사용한다 하지만 capacity는 변하지 않는다.
가장 뒤의 항목을 삭제할 때는 pop_back()을 사용한다.
임의의 위치응 삭제할 때는 erase()를 사용한다.
v.pop_back();
v.erase(v.begin() + 1);
v.erase(v.begin(), v.end() - 1); //begin 부터 end의 앞까지 삭제
v.clear(); //{}
2. list
생성
list<int> lst = {1,2,3};
항목 룩업
list.front()
list.back()
항목 삽입/삭제
vector와 전체적으로 같다.
유용한 메서드
size() : 항목의 개수 반환
empty() : 비어있는 여부 반환
resize() : size 재설정
splice() : 다른 list 삽입 - 연결될 위치에 수정하므로 상수시간 처리
unique() : 중복 삭제
merge() : list 합병
sort() : sort
reverse() : 역순 재배치
3. deque
양방향 큐 자료구조
벡터와 매우 유사
'C++' 카테고리의 다른 글
연관 컨테이너와 비순차 연관 컨테이너 (0) | 2023.09.23 |
---|---|
컨테이너 어댑터와 비트셋 컨테이너 (0) | 2023.09.23 |
람다 (0) | 2023.09.21 |
스코프 (0) | 2023.09.21 |
포인터 (0) | 2023.09.20 |