동적배열(vector)
동적배열은 배열의 크기를 미리 정하지 않고 자료의 개수가 변함에 따라 배열의 크기가 변경되는 배열이다. 이는 C++에서 배열(정적배열)을 선언 시 배열의 크기를 정해야하는 단점을 보완한 것이다. C++의 STL에서는 vector라는 자료형으로 동적배열이 구현되어 있다.
vector가 동적으로 배열을 할당하는 과정을 이해해보자. vector는 맨 뒤쪽에서 삽입과 삭제가 이루어진다. 이렇게 들어간 요소들이 배열의 크기인 vec.size()를 형성한다. 또한 vector자료형은 배열 요소들의 갯수가 증가함에 따라 공간을 점점 늘려가며 할당하므로 배열의 크기보다 더 큰 여유공간을 할당해둔다. 이를 vec.capacity()라고 한다. 벡터가 너무 커져 연속된 메모리를 할당할 수 없을 경우, 다른 메모리로 복사하여 배열을 할당할 수 있다. 아래의 예제를 통해서 벡터에서 자주 쓰이는 함수들을 소개한다.
- 벡터 선언
- 삽입/삭제
- 벡터의 각 요소 출력
- 벡터의 맨 앞, 맨 뒤 요소 출력
- 벡터 초기화
#include<iostream>
#include<vector>
using namespace std;
int main() {
//벡터 선언
vector<int> a;
//제일 뒤에 요소 추가
a.push_back(1);
a.push_back(2);
a.push_back(3);
//맨 뒤의 요소 제거
a.pop_back();
//전체 요소 출력
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
cout << a.at(i) << " ";
}
cout << endl;
//첫번째 요소와 마지막 요소 출력
cout << a.front() << " ";
cout << a.back() << " ";
//벡터 초기화
a.clear();
return 0;
}
Reference
프로그래밍 대회에서 배우는 알고리즘 문제해결전략, 구종만
'Programming > C++ STL' 카테고리의 다른 글
[C++ STL] queue(큐) (0) | 2020.09.15 |
---|---|
[C++ STL] stack(스택) (2) | 2020.09.15 |
[C++ STL] unique함수와 erase함수를 통한 문자열 중복제거 (0) | 2020.09.14 |
[C++ STL] C++ 입출력 속도 향상 (0) | 2020.09.07 |
[C++ STL] algorithm헤더의 유용한 함수들(정렬, 최댓값, 최솟값) (0) | 2020.09.02 |