C++ Vector 사용 방법 및 값 추가 삭제 예제

Vector는 C++ 표준 라이브러리 STL(Standard Template Library)에 있는 컨테이너로 사용자가 사용하기 편리하게 정의된 class입니다.


Vector의 가장 큰 장점은 동적으로 원소를 추가할 수 있으며 크기가 자동으로 늘어난다는 것입니다.

속도는 array(배열)에 비해 성능은 떨어지지만 메모리를 효율적으로 관리할 수 있습니다.

 

Vector 사용법

Vector를 생성하면 메모리 heap에 동적 할당돼 생성됩니다.
Vector를 선언하는 방법을 보겠습니다.

#include <vector>

vector<int> v;                       // int타입 벡터 생성
vector<int> v = { 1, 2, 3};          // int타입 백터 생성 및 1, 2, 3 으로 초기화
vector<int> v[10];                   // int타입 벡터 배열(크기 : 10) 생성
vector<int> v[] = {{ 1, 2}, {3, 4}}; // int타입 백터 배열 생성(행은 가변이지만 열은 고정)
vector<vector<int>> v;               // 2차원 백터 생성(행과 열 모두 가변)
vector<int> v(5);                    // 5개의 원소를 0으로 초기화
vector<int> v(5, 3);                 // 5개의 원소를 3으로 초기화
vector<int> v2(v);                   // 벡터 v를 복사하여 벡터v2 생성

 

Vector를 사용하기 위해서는 헤더 파일을 include 한 뒤 선언하여 사용하여 사용합니다. 

예제의 자료형은 모두 int이지만 다른 자료형이나 class를 넣어도 됩니다.

 

Vector 값 추가 

Vector에 값을 추가하기 위해서는 insert, push_back를 사용합니다.

  • insert – 원하는 위치에 요소 추가
  • push_back – 마지막 부분에 새로운 요소 추가

 

Vector의 원하는 위치에 요소를 삽입하는 insert 사용 방법을 보겠습니다.

#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

int main() {
    
    vector<int> v = {1, 2, 3};
    
    vector<int>::iterator it;
    it = v.begin() + 1;
    
    v.insert(it, 4);
    
    for (int i = 0; i < v.size(); i++)
       cout << v[i] << " "; 
  
}

 

결과

1 4 2 3

 

insert를 사용해 2번째 위치인 값 2 앞에 4를 추가했습니다.

insert에 위치를 지정하기 위해서는 iterator를 사용해야 합니다.

위치를 직접 지정하는 경우에는 에러가 발생합니다.

원하는 위치에 같은 값을 여러 개 추가하고 싶은 경우에는 insert 함수에 파라미터를 하나 더 추가합니다.

#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

int main() {
    
    vector<int> v = {1, 2, 3};
    
    vector<int>::iterator it;
    it = v.begin() + 1;
    
    v.insert(it, 3, 4);
    
    for (int i = 0; i < v.size(); i++)
       cout << v[i] << " "; 
  
}

 

결과

1 4 4 4 2 3

 

숫자 4가 지정한 위치에 3개 추가되었습니다.

v.insert(it, 3, 4)에서 첫 번째 파라미터는 위치, 두 번째 파라미터는 반복 횟수, 3번째 파라미터는 추가하고 싶은 값입니다.

이번에는 Vector 마지막에 새로운 요소를 추가하는 push_back 사용 방법을 알아보겠습니다.

#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

int main() {
    
    vector<int> v = {1, 2, 3};
    
    v.push_back(4);
    
    for (int i = 0; i < v.size(); i++)
       cout << v[i] << " "; 
  
}

 

결과

1 2 3 4

 

Vector 마지막에 새로운 요소가 추가되었습니다.

 

Vector 값 삭제

Vector에서 값을 삭제하기 위해서는 erase, pop_back를 사용합니다.

  • erase – 원하는 위치의 값을 삭제
  • pop_back –  마지막 요소를 삭제

 

Vector의 원하는 위치 값을 삭제하는 erase 사용 방법을 보겠습니다.

#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

int main() {
    
    vector<int> v = {1, 2, 3, 4};
    it = v.begin() + 1;

    v.erase (it);
    
    for (int i = 0; i < v.size(); i++)
       cout << v[i] << " "; 
  
}

 

결과

1 3 4

 

v.begin()는 벡터의 첫 번째 인덱스를 의미합니다.

v.begin() + 1을 해 2번째 위치에 있는 요소를 삭제했습니다.

범위를 지정해 위치를 삭제할 수 있습니다.

#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

int main() {
    
    vector<int> v = {1, 2, 3, 4};
    
    vector<int>::iterator it;
    it = v.begin() + 1;
    
    vector<int>::iterator et;
    et = v.begin() + 3;

    
    v.erase (it,et);
    
    for (int i = 0; i < v.size(); i++)
       cout << v[i] << " "; 
  
}

 

벡터의 2번째와 3번째 요소를 삭제하고 있습니다.

시작 위치인 it는 2번째 요소를 가리키고 있습니다.

종료 위치인 et는 4번째 요소를 가리키고 있습니다.

종료 위치 인덱스는 지정한 위치의 앞에 요소까지 삭제를 하게 됩니다.

샘플처럼 2번째 3번째 요소를 삭제하고 싶은 경우에는 인덱스를 4까지 지정해야 합니다.

벡터의 마지막 요소를 삭제하는 pop_back 사용 방법을 보겠습니다.

#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

int main() {
    
    vector<int> v = {1, 2, 3, 4};
    
    v.pop_back();

    for (int i = 0; i < v.size(); i++)
       cout << v[i] << " "; 
  
}

 

결과

1 2 3

 

Vector 마지막 요소가 삭제되었습니다.

이것으로 벡터의 기본 사용 방법과 벡터에 값을 추가 또는 삭제하는 방법을 알아봤습니다.

댓글