1. vector 컨테이너
자동으로 메모리가 할당되는 배열이다.
연속적인 메모리 공간을 미리 할당한다.
원소 삽입 시 메모리 공간이 부족하다면 새 메모리 공간을 할당한 뒤 그곳에 기존 원소들을 복사한 다음 새 원소를 삽입한다.
size: 실제 원소들이 있는 공간. resize 함수로 변경할 수 있다.
capability: 벡터가 차지하고 있는 공간. reserve 함수로 변경할 수 있다.
2. 값 삭제
erase: 값 삭제
remove: 위치 변경
두 가지를 주로 같이 사용한다.
remove를 사용하여 해당 조건에 부합하는 원소들을 벡터의 뒤에 넣은 후, 뒤로 밀린 원소들의 시작범위를 넘겨준다.
vector<> v;
//...
v.erase(remove(범위 시작, 범위 끝, 지우고 싶은 원소), v.end());
v.erase(remove_if(범위 시작, 범위 끝, 지우는 조건), v.end());
3. vector<bool>
실제 bool을 담는 것이 아니다. 프록시 패턴(어떤 객체가 하는 일을 그대로 흉내내는 객체. e.g. 스마트포인터)을 통해 bool을 담고 있는 것처럼 동작하게 한다.
실제로는 vector<bool>이 유일하게 원소 한 자리에 8비트의 비트필드를 두고 있다.
실제로 bool이 담긴 자료구조는 std::bitset, deque<bool>등이 있다.
4. vector vs deque
vector는 메모리가 연속적이다.
deque는 메모리가 불연속적이기 때문에 capacity와 reserve가 없다. 포인터 간 연산도 불가능하다.
5. vector vs list
vector는 메모리가 연속적이다. 랜덤 접근이 가능하고 중간 요소를 제거, 추가하는 데 O(n) 시간복잡도를 가진다.
llist는 메모리가 불연속적이다. 랜덤 접근이 불가능하고 이중 연결 리스트로 구현되어있다. 위치 상관없이 추가, 제거하는 데 상수 시간이 걸린다.
참고자료
'CS 지식' 카테고리의 다른 글
[C++] 순수 가상 함수 (pure virtual function) (0) | 2025.05.08 |
---|---|
[C++] 가상 소멸자 (virtual distructor) (0) | 2025.05.08 |
[C++] typedef vs using (별칭 선언) (0) | 2025.05.08 |
[C++] template (0) | 2025.05.08 |
[C++] struct vs class (0) | 2025.05.08 |