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

+ Recent posts