vector
-> 배열 기반의 컨테이너이다.
-> 배열 기반이기 때문에 인덱스 접근이 가능하다.(탐색에 용이함)
-> 원소 삽입/삭제 시에는 앞에서부터 할 수 없으며, 맨 뒤에서만 가능하다.
-> 중간 삽입 및 삭제 시에는 삽입 위치의 확보, 삭제 위치의 활용을 위해
-> 해당 원소 이후 포인터의 이동이 발생한다.(선형 시간 O(n))
-> 단, 맨 끝에서 삽입 및 삭제는 포인터 이동이 필요 없다.(상수 시간 O(1))
-> 배열 기반이기 때문에 메모리 개수를 넘어서는 삽입의 시도가 있을 경우
-> 배열의 재할당 및 기존 원소들의 복사가 발생한다.
-> vector의 원소를 삭제하여 원소가 존재하던 메모리 공간은 남아 있는다.
-> 결론적으로 vector는 삽입 삭제가 불리하다고 할 수 있다.
vector의 사용법
-> vector를 사용하기 위해서는 #include <vector>를 추가해야한다.
vector의 선언
-> 저장하고 관리할 데이터의 자료형을 <>안에 명시해준다.
1
2
|
vector<int> vecInt;
vector<float> vecFloat;
|
cs |
원소 삽입
-> push
-> vector는 뒤에서만 삽입이 가능하다.
1
2
3
|
vector<int> vecInt;
vecInt.push_back(1);
|
cs |
원소 삭제
-> pop
1
|
vecInt.pop_back();
|
cs |
size
-> 원소의 개수를 반환하는 함수
1
2
|
for (size_t i = 0; i < vecInt.size(); ++i)
cout << vecInt[i] << endl;
|
cs |
capacity()
-> 메모리 할당 개수를 반환하는 함수
1
|
cout << "vecInt.capa: " << vecInt.capacity() << endl;
|
cs |
vector의 메모리 개수를 초과하는 삽입의 시도가 있을 경우 재할당 및 복사가 발생한다.
-> 여기서 재할당은 기존 메모리 개수 / 2 만큼 추가로 재할당이 발생한다.
clear()
-> 모든 원소를 삭제하는 함수
-> 단, vector에 저장하는 원소가 동적할당된 주소일 경우
-> clear를 호출하기 전에 사용자가 직접 동적할당을 해제해주고 호출해야 한다.
1
|
vecInt.clear();
|
cs |
empty()
-> 원소가 비어있는지 아닌지 검사하는 함수
-> 비어 있을 경우 true, 비어있지 않을 경우 false
1
|
if (vecInt.empty())
|
cs |
swap()
-> swap을 호출하는 컨테이너와 swap의 인자로 넘겨주는 컨테이너의 원소와 메모리 개수를 맞바꾼다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
vector<int> vecInt;
vector<int> vecTemp;
cout << "vecInt.size: " << vecInt.size() << endl;
cout << "vecInt.capa: " << vecInt.capacity() << endl;
cout << "------------------------------------------" << endl;
cout << "vecTemp.size: " << vecTemp.size() << endl;
cout << "vecTemp.capa: " << vecTemp.capacity() << endl;
cout << "================swap======================" << endl;
vecInt.swap(vecTemp);
cout << "vecInt.size: " << vecInt.size() << endl;
cout << "vecInt.capa: " << vecInt.capacity() << endl;
cout << "------------------------------------------" << endl;
cout << "vecTemp.size: " << vecTemp.size() << endl;
cout << "vecTemp.capa: " << vecTemp.capacity() << endl;
|
cs |
-> swap을 이용하여 메모리 할당 개수 소멸 시키기
1
2
3
4
5
6
7
8
|
cout << "vecInt.size: " << vecInt.size() << endl;
cout << "vecInt.capa: " << vecInt.capacity() << endl;
//vecInt.swap(vector<int>());
vector<int>().swap(vecInt);
cout << "vecInt.size: " << vecInt.size() << endl;
cout << "vecInt.capa: " << vecInt.capacity() << endl;
|
cs |
'Programming > STL' 카테고리의 다른 글
C++(STL Container) 조건자(algorithm) (0) | 2020.09.28 |
---|---|
C++(STL Container) 반복자(iterator) (0) | 2020.09.28 |
C++(STL Container) map (0) | 2020.09.27 |
C++(STL Container) list (0) | 2020.09.27 |
C++ STL이란? (0) | 2020.09.27 |