벡터의 개관

Vector는 C++의 순차 컨테이너 중의 하나로 순차 컨테이너에는 Vector말고 list, deque등이 있다.

오늘은 알고리즘 문제해결 전략 책에서 빈번하게 나오는 Vector부터 정리해보기로 하자.


STL에서 벡터는 동적배열(dynamic array)나 스마트배열로 이야기 할 수 있다.



벡터

벡터는 템플릿으로 설계되어 있기 때문에 어떤 타입이든지 저장할 수 있다.

요소의 개수에 따라서 자동으로 크기가 조절된다.


먼저 벡터의 기본 선언부터 알아보자.


일단 헤더파일을 추가해준다. 


#include <vector>


그리고 선언은 가장 기본적으로 다음과 같이 해준다.


vector<자료형> score(요소들의개수);

만약 데이터를 scores에 입력하고 싶으면 배열처럼 [ ] 연산자를 사용하면 된다.

배열과 비슷한 점이 있다면

인덱스의 범위에 대한 문제이다.


첫 번째 요소의 인덱스는 배열과 마찬가지로 벡터도 0이므로

다음과 같이 선언 한다.

vector<double> scores(10);
scores[10] = 65; // 오류발생
역시 10개의 공간을 선언했을시에 마지막 인덱스는 9까지이므로 그 이상의 인덱스에 접근하려고 하면 오류가 발생한다.

그리고!! 선언시에 무조건 크기를 지정해주어야 한다. 따라서 다음과 같은 문장도 오류가 된다.
vector<double> scores;
scores[0] = 65;
하지만 벡터의 가장 큰 장점은 크기가 가변적으로 변하게 할 수 있다는 점이다. 
그것을 가능하게 하는것이 push_back()함수와 pop_back()함수이다. 
push_back()함수는 공백벡터에서 요소가 하나씩 추가될 때마다 벡터의 크기를 확대한다. 
마찬가지로 pop_back()함수는 요소를 뒤에서부터 차례로 삭제한다. 
하지만 요소는 반환하지 않으므로 삭제하기 전에 데이터를 다른 변수에 저장해야 한다. 

반복자
어떤 컨테이너 안에 들어 있는 요소라도 쉽게 접근하기 위해 만들어진 것이다.
실수형을 저장하는 벡터의 반복자는
vector<double>::iterator it;

와 같이 선언한다.


반복자의 사용 예시



double highest = -100;
vector<double>::iterator it;
for(it = scores.begin(); it != scores.end(); it++)
{
    if(*it > highest)
    {
         highest = *it;
    }
}

벡터의 다양한 생성자

벡터는 여러가지 다양한 생성자를 가지고 있다.



vector<int> array1;                     //크기가 0인 벡터 생성
vector<int> array2(10)                 //열 개의 요소를 가지는 벡터 생성
vector<int> array3(10, 1);           //1로 초기화 된 열 개의 요소를 가지는 벡터 생성
vector<int> array4(array3);          //array3과 똑같은 요소를 가지는 벡터 생성
int data[] = {10, 20, 30, 40, 50, 60, 70, 80, 90};
vector<int> array5(data, data + 5);  //data 배열의 다섯 개의 요소를 가지는 벡터 생성

벡터와 연산자

벡터에는 편리성을 위해 연산자들이 중복 정의되어 있다. 

기존의 배열에서는 = 연산자를 이용하여 하나의 배열을 다른 배열로 복사할 수 없엇지만 벡터는 가능하다. 

그리고 비교연산도 가능하다.  '==' 나 '!=' 연산자를 사용할 수 있다.



int array1[] = {10, 20, 30, 40, 50};
int array2[] = {10, 20, 30, 40, 50};
vector<int> v1(array1, array1+5);
vector<int> v2(array2, array2 +5);

if( v1 == v2)
    cout<< "두 벡터가 같음 " << endl;
else
    cout<< "두 벡터가 같지 않음 " << endl;  //두 벡터가 서로 다르므로 이 구문 출력!

컨테이너의 공통 멤버 함수


 함수

설명 

Container()

기본 생성자 

Container(size)

크기가 size인 컨테이너 생성 

Container(size, value)

크기가 size이고 초기값인 value인 컨테이너 생성 

Container(iterator, iterator) 

다른 컨테이너로부터 초기값의 범위를 받아서 생성 

begin() 

첫 번째 요소의 반복자 위치 

clear() 

모든 요소를 삭제 

empty() 

비어 있는지를 검사 

end() 

반복자가 마지막 요소를 지난 위치 

erase(iterator) 

컨테이너의 중간 요소를 삭제 

erase(iterator, iterator) 

컨테이너의 지정된 범위를 삭제 

front() 

컨테이너의 첫 번째 요소 반환 

insert(iterator, value) 

컨테이너 중간에 value를 삽입 

pop_back() 

컨테이너의 마지막 요소를 삭제 

push_back(value) 

컨테이너의 끝에 데이터를 추가 

rbegin() 

끝을 나타내는 역반복자 

rend() 

역반복자가 처음을 지난 위치 

size() 

컨테이너의 크기 

operator=(Container) 

대입 연산자의 중복 정의 


이상 2016.01.03일에 공부한 STL::vector의 요약 정리.

+ Recent posts