벡터(Vector)는 동적 배열처럼 작동하는 C++ STL의 대표적인 시퀀스 컨테이너입니다. 요소가 삽입되거나 삭제될 때 크기가 자동으로 조절되며, 저장 공간 역시 컨테이너가 스스로 관리합니다. 벡터의 요소들은 연속된 메모리 공간에 배치되기 때문에 반복자(iterator)를 사용하여 순차적으로 접근하고 탐색할 수 있습니다. 또한 데이터는 벡터의 시작 위치, 중간, 끝 어디에서든 자유롭게 삽입하거나 삭제할 수 있습니다.
사용된 함수와 설명
이번 예제에서 활용되는 벡터의 주요 멤버 함수는 다음과 같습니다.
여기서 사용된 함수 목록:
v.size() = 벡터에 실제 저장된 요소의 개수(크기)를 반환합니다.
v.push_back() = 벡터의 맨 뒤에 새로운 요소를 삽입합니다.
v.pop_back() = 벡터의 맨 마지막 요소를 제거합니다.
v.capacity() = 현재 벡터에 할당된 저장 공간의 크기를 요소 개수 단위로 반환합니다.
v.clear() = 벡터의 모든 요소를 제거합니다.예제 코드
아래 예제는 메뉴 방식으로 벡터의 다양한 기능을 직접 확인할 수 있는 콘솔 프로그램입니다.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
vector<int>::iterator it;
int c, i;
while (1) {
cout<<"1.벡터 크기 확인"<<endl;
cout<<"2.벡터에 요소 삽입"<<endl;
cout<<"3.벡터의 마지막 요소 삭제"<<endl;
cout<<"4.벡터 용량(capacity) 출력"<<endl;
cout<<"5.반복자로 전체 요소 출력"<<endl;
cout<<"6.벡터 비우기"<<endl;
cout<<"7.종료"<<endl;
cout<<"선택: ";
cin>>c;
switch(c) {
case 1:
cout<<"벡터 크기: ";
cout<<v.size()<<endl;
break;
case 2:
cout<<"삽입할 값 입력: ";
cin>>i;
v.push_back(i);
break;
case 3:
cout<<"마지막에 삽입한 요소 삭제:"<<endl;
v.pop_back();
break;
case 4:
cout<<"벡터 용량 출력: ";
cout<<v.capacity()<<endl;
break;
case 5:
cout<<"반복자로 출력한 벡터: ";
for (it = v.begin(); it != v.end(); it++) {
cout<<*it<<" ";
}
cout<<endl;
break;
case 6:
v.clear();
cout<<"벡터가 비워졌습니다"<<endl;
break;
case 7:
exit(1);
break;
default:
cout<<"잘못된 선택입니다"<<endl;
}
}
return 0;
}실행 결과
1.벡터 크기 확인 2.벡터에 요소 삽입 3.벡터의 마지막 요소 삭제 4.벡터 용량(capacity) 출력 5.반복자로 전체 요소 출력 6.벡터 비우기 7.종료 선택: 1 벡터 크기: 0 1.벡터 크기 확인 2.벡터에 요소 삽입 3.벡터의 마지막 요소 삭제 4.벡터 용량(capacity) 출력 5.반복자로 전체 요소 출력 6.벡터 비우기 7.종료 선택: 2 삽입할 값 입력: 7 1.벡터 크기 확인 2.벡터에 요소 삽입 3.벡터의 마지막 요소 삭제 4.벡터 용량(capacity) 출력 5.반복자로 전체 요소 출력 6.벡터 비우기 7.종료 선택: 2 삽입할 값 입력: 6 1.벡터 크기 확인 2.벡터에 요소 삽입 3.벡터의 마지막 요소 삭제 4.벡터 용량(capacity) 출력 5.반복자로 전체 요소 출력 6.벡터 비우기 7.종료 선택: 2 삽입할 값 입력: 4 1.벡터 크기 확인 2.벡터에 요소 삽입 3.벡터의 마지막 요소 삭제 4.벡터 용량(capacity) 출력 5.반복자로 전체 요소 출력 6.벡터 비우기 7.종료 선택: 2 삽입할 값 입력: 3 1.벡터 크기 확인 2.벡터에 요소 삽입 3.벡터의 마지막 요소 삭제 4.벡터 용량(capacity) 출력 5.반복자로 전체 요소 출력 6.벡터 비우기 7.종료 선택: 2 삽입할 값 입력: 5 1.벡터 크기 확인 2.벡터에 요소 삽입 3.벡터의 마지막 요소 삭제 4.벡터 용량(capacity) 출력 5.반복자로 전체 요소 출력 6.벡터 비우기 7.종료 선택: 4 벡터 용량 출력: 8 1.벡터 크기 확인 2.벡터에 요소 삽입 3.벡터의 마지막 요소 삭제 4.벡터 용량(capacity) 출력 5.반복자로 전체 요소 출력 6.벡터 비우기 7.종료 선택: 5 반복자로 출력한 벡터: 7 6 4 3 5 1.벡터 크기 확인 2.벡터에 요소 삽입 3.벡터의 마지막 요소 삭제 4.벡터 용량(capacity) 출력 5.반복자로 전체 요소 출력 6.벡터 비우기 7.종료 선택: 3 마지막에 삽입한 요소 삭제: 1.벡터 크기 확인 2.벡터에 요소 삽입 3.벡터의 마지막 요소 삭제 4.벡터 용량(capacity) 출력 5.반복자로 전체 요소 출력 6.벡터 비우기 7.종료 선택: 5 반복자로 출력한 벡터: 7 6 4 3 1.벡터 크기 확인 2.벡터에 요소 삽입 3.벡터의 마지막 요소 삭제 4.벡터 용량(capacity) 출력 5.반복자로 전체 요소 출력 6.벡터 비우기 7.종료 선택: 6 벡터가 비워졌습니다 1.벡터 크기 확인 2.벡터에 요소 삽입 3.벡터의 마지막 요소 삭제 4.벡터 용량(capacity) 출력 5.반복자로 전체 요소 출력 6.벡터 비우기 7.종료 선택: 7 프로그램을 종료합니다.
용량(capacity)이 8로 표시되는 이유는?
vector는 처음부터 넉넉한 메모리를 할당하지 않고, 요소가 추가되어 공간이 부족해질 때마다 기존 용량의 약 2배씩 늘려가며 재할당합니다. 위 실행 결과에서 요소를 5개 삽입했을 때 용량이 8로 표시되는 것도 1 → 2 → 4 → 8 순서로 용량이 확장되었기 때문입니다. 즉, size()는 실제 저장된 요소의 개수(5개)를 의미하고, capacity()는 여분의 공간을 포함해 미리 할당된 전체 저장 공간(8개 분량)을 의미합니다. 이러한 동작 방식을 이해하면 벡터를 더욱 효율적으로 활용할 수 있습니다.