본문 바로가기
프로그래밍 언어/C++

[C++] [STL] Vector 사용 방법

by 까망 하르방 2025. 1. 9.
반응형

Vector

동적으로 원소를 추가하고 크기를 자동으로 늘려준다.

C++ 표준 라이브러리(STL) → #include <vector>

 

- front() : 첫 번째 원소
- back() : 마지막 원소
- begin() : 첫번째 위치
- end() : 마지막의 다음 위치
- size() : 원소 개수
- capacity() : 할당된 공간 크기
- push_back(value) : vector 끝에 원소 삽입
- pop_back() : 끝에 있는 원소 삭제
- insert(index, value) : index 위치에 원소 삽입
- erase(iter) : vector의 iter 위치의 원소 삭제
- erase(iter1, iter 2) : [iter 1, iter 2) 앞 까지 원소 삭제 
- resize(size), resize(size, value) : size 만큼 크기 변경하거나 동시에 초기화
- clear() : 모든 원소 삭제
- empty(): 비어있는지 확인합니다. (true / false)

 

#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
    vector<int> v;

    v.push_back(3); v.push_back(4);
    v.push_back(5); v.push_back(6);
    v.push_back(7);

    cout << v[0] << endl; // 3
    cout << v.size() << endl; // 5
    cout << v.capacity() << endl; // 6

    v.erase(v.begin()); // [0]번째 원소 3 제거
    v.erase(v.begin() + 1, v.begin() + 2); // [1]번째 원소 5 제거

    for (int i = 0; i < v.size(); i++) {
        cout << v.at(i) << " ";
    }
    cout << endl;
}

 

 

특징

가변적으로 크기가 변하는 배열이라고 볼 수 있다.

 

 속도적인 측면에서는 배열에 비해 떨어지더라도

 메모리 측면에서는 효율적인 관리 가능

 

 한 메모리 블록에 연속하게 저장

   → 메모리 재할당에 따른 부하 발생 有

 

 중간 삽입/삭제가 빈번한 경우에는 vector 구조다 링크드리스트 구조를 사용하느 것이 효율적.

 

  반복자 iterator도 사용 가능

 

 vector에는 .at(index)처럼 [index] 처럼 

  index번째 원소에 접근하는 것은 동일하다.

  다만 at(index)은 범위를 검사하여 범위 밖 원소 접근시 예외처리 (std::out_of_range)

  [](operator [])는 범위검사가 없기에 예외처리 발생 X

  이처럼 vector는 다양한 선언방법과 메소드 용도가 존재한다.

 

C++17 부터는 초기값이 있는 경우 타입 인자 생략 가능

• 초기값이 없는 경우 반드시 타입인자 전달 필요

std::vector<int> v1 = { 1, 2 }; // ok
std::vector v2 = { 1, 2 }; // ok (C++17 부터)

std::vector<int> v3; // ok
std::vector v4; // error

 

 

Q) size와 capacity 차이와 용도가 무엇인가요?

• capacity = 들어갈 수 있는 총 용량 (할당된 공간 크기)
size = 현재 들어가 있는 개수 (원소 개수)

 

ex) 10개(=capacity) 중에 3개(=size)

→ vector는 일정 capacity 만큼의 메모리가 할당되는데 원소가 새롭게 삽입될 때마다

    추가적인 메모리 할당이 필요하다.

    이때, capacity (= 용량)가 부족한 경우 {capacity/2} 만큼 capacity를 늘린다.

반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

[C/C++] 함수 template  (0) 2025.01.11
[C/C++] 문자열 String  (0) 2025.01.10
[C++] decltype 키워드  (1) 2025.01.02
[C++] 일관된 초기화 (uniform initialization)  (2) 2025.01.01
[C++] structure binding  (3) 2024.12.31

댓글