Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL 벡터(Vector) 구현하기: 핵심 함수와 예제 코드

벡터(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개 분량)을 의미합니다. 이러한 동작 방식을 이해하면 벡터를 더욱 효율적으로 활용할 수 있습니다.