PL 문법/C++

[C++] STL Vector 사용법

jHoon0223 2021. 7. 13. 15:54

Vector 란?

Vector는 C++ 표준 라이브러리(Standard Template Library)에 있는 컨테이너로, 사용자가 손쉽게 사용하기 위해 정의된 class이다. Vector는 쉽게 말해 크기가 가변적으로 변하는 배열이라고 할 수 있다. 속도적인 측면에서는 배열에 비해 떨어지지만 메모리를 효율적으로 관리할 수 있다는 장점이 있어 굉장히 많이 사용한다. vector는 배열과 마찬가지로 원소들이 하나의 메모리 블록에 연속하게 저장된다. 그렇기에 원소가 추가되거나 삽입될 때 메모리 재할당이 발생할 수 있고 상당한 부하가 발생하게 된다는 점은 단점으로 꼽히고 있다.

 

Vector의 구조

Vector를 생성하면 메모리 heap에 생성되며 동적할당된다.

front() : 첫번째 원소
back() : 마지막 원소
begin() : 첫번째 원소의 위치
end() : 마지막 원소의 다음 위치
size() : 원소의 개수
capacity() : 할당된 공간의 크기

 

Vector 사용법

Vector 선언
vector<int> v; //int타입 벡터 생성
vector<int> v = { 1, 2, 3 }; //int타입 벡터 생성 후 1, 2, 3 으로 초기화
vector<int> v[10]; //크기가 10인 int타입 벡터 생성
vector<int> v(10); //크기가 10인 int타입 벡터 생성 후, 0으로 초기화
vector<int> v(10, 3); //크기가 10인 int타입 벡터 생성 후, 3으로 초기화
vector<int> v2(v); //벡터 v를 복사하여 벡터 v2 생성
vector<int> v[] = {{1, 2}, {3, 4}} //int타입 2차원 벡터 생성 (행은 가변, 열은 고정)
vector<vector<int>> v; //int타입 2차원 벡터 생성 (행과 열 모두 가변)

Vector를 사용하기 위해서는 <vector>라는 헤더 파일을 먼저 include 한 뒤 위와 같이 선언하여 사용한다. 편의상 예시의 자료형은 모두 int이며 안에 다른 자료형이나 class를 넣어도 무방하다.

 

Vector에 값 추가
v.push_back(10); //마지막 위치에 10 삽입

vector<int>::iterator it = v.begin();
it = v.insert(it, 2); //맨 앞에 2 삽입
it = v.insert(it, 3, 2); //맨앞에 2를 3개 삽입
it = v.insert(it+2, 4, 2); //2번째 인덱스부터 2를 4개 삽입

Vector의 끝에 값을 추가하려면 Vector의 push_back(value)이라는 메서드를 사용하면 되고 중간에 값을 삽입하고 싶다면 v.insert(index,value)를 사용하면 된다. index를 생략하면 Vector의 맨 뒤에 값이 추가되며 index중간에 값을 추가하면 해당 인덱스부터 마지막 인덱스까지 모두 한 칸씩 뒤로 밀려난다.

 

Vector에 값 삭제
v.pop_back(); //마지막에 넣은 값 제거
v.erase(v.begin() + 10); //인덱스 10의 값을 제거
v.erase(vec.begin(), vec.begin() + 5); //인덱스 0부터 5의 값을 제거
v.clear(); //모든 값 제거

Vector의 끝에 있는 값을 삭제하려면 Vector의 pop_back()이라는 메서드를 사용하면 되고. 중간에 있는 값을 삭제하고 싶다면 eraser(index, index)함수를 사용하면 된다. eraser를 사용하여 특정 인덱스의 값을 제거하면 바로 뒤에 있는 인덱스부터 마지막 인덱스까지 모두 앞으로 한 칸씩 앞으로 당겨진다. 모든 값을 제거하려면 clear() 메소드를 사용하면 된다.

 

Vector의 크기
v.size(); //원소의 개수
v.capacity(); //물리적 크기

 

Vector 값 출력
#include<iostream>
#include<vector>

using namespace std;

int main() {
    vector<int> intVector;
    for (int i = 0 ; i < 7; i++)
        intVector.push_back(i);

    for (int i = 0 ; i < intVector.size(); i++)
        cout << intVector[i] << " ";
    //일반 배열처럼 출력

    for (vector<int>::iterator it = intVector.begin(); it != intVector.end();) {
        cout << *it << " ";
        it++;
    }
    //Iterator를 활용하여 출력

    return 0;
}
728x90

'PL 문법 > C++' 카테고리의 다른 글

[C++] STL priority_queue 사용법  (0) 2024.02.14
[C++] STL map / multimap 사용법  (0) 2021.08.26
[C++] STL set / multiset 사용법  (0) 2021.08.26
[C++] C++ 표준 라이브러리  (0) 2021.07.13