벡터의 개관
Vector는 C++의 순차 컨테이너 중의 하나로 순차 컨테이너에는 Vector말고 list, deque등이 있다.
오늘은 알고리즘 문제해결 전략 책에서 빈번하게 나오는 Vector부터 정리해보기로 하자.
STL에서 벡터는 동적배열(dynamic array)나 스마트배열로 이야기 할 수 있다.
벡터
벡터는 템플릿으로 설계되어 있기 때문에 어떤 타입이든지 저장할 수 있다.
요소의 개수에 따라서 자동으로 크기가 조절된다.
먼저 벡터의 기본 선언부터 알아보자.
일단 헤더파일을 추가해준다.
1 | #include <vector> |
그리고 선언은 가장 기본적으로 다음과 같이 해준다.
1 | vector<자료형> score(요소들의개수); |
만약 데이터를 scores에 입력하고 싶으면 배열처럼 [ ] 연산자를 사용하면 된다.
배열과 비슷한 점이 있다면
인덱스의 범위에 대한 문제이다.
첫 번째 요소의 인덱스는 배열과 마찬가지로 벡터도 0이므로
다음과 같이 선언 한다.
1 2 | vector< double > scores(10); scores[10] = 65; // 오류발생 |
1 2 | vector< double > scores; scores[0] = 65; |
1 | vector< double >::iterator it; |
와 같이 선언한다.
반복자의 사용 예시
1 2 3 4 5 6 7 8 9 | double highest = -100; vector< double >::iterator it; for (it = scores.begin(); it != scores.end(); it++) { if (*it > highest) { highest = *it; } } |
벡터의 다양한 생성자
벡터는 여러가지 다양한 생성자를 가지고 있다.
1 2 3 4 5 6 | 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 배열의 다섯 개의 요소를 가지는 벡터 생성 |
벡터와 연산자
벡터에는 편리성을 위해 연산자들이 중복 정의되어 있다.
기존의 배열에서는 = 연산자를 이용하여 하나의 배열을 다른 배열로 복사할 수 없엇지만 벡터는 가능하다.
그리고 비교연산도 가능하다. '==' 나 '!=' 연산자를 사용할 수 있다.
1 2 3 4 5 6 7 8 9 | 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의 요약 정리.