[C++] std::vector

2025. 3. 12. 20:00·C | C++/STL
반응형

개요

 C++에서는 동적 크기를 갖는 컨테이너로 표준 라이브러리의 vector를 사용할 수 있습니다.

vector<int> vc { 1, 2, 3, 4, 5 };

 vector는 std:list와 매우 비슷하지만, 내부 구현 방식과 특성이 다르기 때문에 상황에 맞게 적절한 컨테이너를 사용해야 합니다. std::list의 주요 특징은 아래 링크의 글에서 자세히 확인할 수 있습니다. 

 

[C++] std::list

개요 C++에서는 동적 크기를 갖는 컨테이너 배열로 표준 라이브러리의 list를 사용할 수 있습니다.list li { 1, 2, 3, 4, 5 }; list는 std::vector와 매우 비슷하지만, 내부 구현 방식과 특성이 다르기 때문

hyeokjunjjang.tistory.com


특징

  • 동적 컨테이너 크기
    • 요소를 추가하거나 삭제할 때 컨테이너의 크기가 자동으로 조절됩니다.
    • capacity가 부족하면 더 큰 새로운 메모리 블록을 할당하고, 새 메모리 블록에 기존 데이터를 복사한 후, 기존 메모리 블록을 해제합니다.
  • 임의 접근 지원
    • 실제 데이터는 연속된 메모리에 저장되어 임의 인덱스 접근이 가능합니다.
    • std::list에 비해 인덱스로 접근하는 속도가 빠릅니다.
    • vector의 iterator는 ++, --, +N, -N 연산을 지원합니다.
  • 잦은 삽입 및 삭제 지양
    • 데이터가 연속된 메모리에 저장되므로, 중간 데이터를 삽입 및 삭제하려면 모든 요소의 이동이 필요합니다.
    • 반면에 데이터의 이동이 필요없는 컨테이너의 끝(back) 부분에 대한 요소의 삽입(push_back) 및 삭제(pop_back)는 비교적 빠른 시간에 수행됩니다.

헤더

#include <vector>

vector를 사용하기 위해서 다음과 같이 <vector> 헤더를 포함해야 합니다.


선언 및 초기화

 

템플릿 매개변수

vector<_Ty, _Alloc = allocator<_Ty>> vec;

 vector의 타입을 선언할 때, 최대 2개의 템플릿 매개변수를 받습니다.

  • _Ty은 실제 데이터의 형식을 나타냅니다.
  • _Alloc은 할당자(Allocator)를 나타내며 지정하지 않으면 기본 할당자가 사용됩니다.

생성자

vector<int> vec { 1, 2, 3, 4, 5 };

 vector를 선언과 동시에 초기화하기 위해서 중괄호를 이용해 컨테이너의 초기 요소들을 설정할 수 있습니다.

 

크기와 초기값 지정

vector<_Ty> vec(_Count, _Value);

 vector의 크기와 초기값을 설정합니다.

  • _Count는 컨테이너의 크기를 나타냅니다.
  • _Value는 요소의 초기값을 나타냅니다.

 

iterator 복사

vector<_Ty> vec(_First, _Last);

 다른 컨테이너의 iterator를 이용하여 요소를 복사합니다.

  • _First는 복사할 컨테이너의 첫 iterator를 나타냅니다.
  • _Last는 복사할 컨테이너의 마지막 iterator를 나타냅니다.

 

vector 복사

vector<_Ty> vec(_Right);

 다른 vector를 복사하여 새로운 vector를 생성합니다.

  • _Right는 복사할 vector를 나타냅니다.

주요 함수

 

size()

vector<int> vec { 1, 2, 3, 4, 5, 6 };
size_t s = vec.size(); // 6을 반환합니다.

 vector의 현재 크기를 반환합니다.

 


capacity()

vector<int> vec { 1, 2, 3, 4, 5 };
vec.push_back(6);
size_t c = vec.capacity(); // 일반적으로 7을 반환합니다.

 vector의 최대 크기를 반환합니다.

 최대 크기는 새 메모리 블록으로 할당될 때마다 컴파일러에 따라 정해진 배수 만큼 커진 크기로 설정됩니다.

 


empty()

vector<int> vec { 1, 2, 3, 4, 5, 6 };
bool is_empty = vec.empty(); // false를 반환합니다.

 vector가 비어있는지 여부(크기가 0이면 true, 그렇지 않으면 false)를 반환합니다.

 


resize(count)

vector<int> vec { 1, 2, 3, 4, 5, 6 };
vec.resize(4); // 컨테이너는 { 1, 2, 3, 4 } 상태임

 vector의 크기를 변경합니다.

 


reserve(count)

vector<int> vec { 1, 2, 3, 4, 5, 6 };
vec.reserve(10); // 컨테이너의 최대 크기가 10이 됩니다.

 vector의 최대 크기를 변경합니다.

 


shrink_to_fit()

vector<int> vec { 1, 2, 3, 4, 5, 6 };
vec.reserve(10); // 컨테이너의 최대 크기가 10이 됩니다.
vec.shrink_to_fit(); // 컨테이너의 최대 크기가 요소의 개수인 6이 됩니다.

 vector의 최대 크기를 요소의 개수에 맞게 변경합니다.

 


at(index)

vector<int> vec { 1, 2, 3, 4, 5, 6 };
int v1 = vec[3]; // 4를 반환합니다.
int v2 = vec.at(3); // 마찬가지로 4를 반환합니다.

 vector의 요소에 접근하여 값을 반환합니다.

 범위 외의 인덱스에 접근하려고 하면 std::out_of_range 예외를 발생시킵니다.

 


front()

vector<int> vec { 1, 2, 3, 4, 5, 6 };
int f = vec.front(); // 1을 반환합니다.

 vector에서 첫 번째 요소의 값을 반환합니다.

 


back()

vector<int> vec { 1, 2, 3, 4, 5, 6 };
int b = vec.back(); // 6을 반환합니다.

 vector에서 마지막 요소의 값을 반환합니다.

 


begin()

vector<int> vec { 1, 2, 3, 4, 5, 6 };
auto it = vec.begin();

 vector에서 첫 번째 요소의 iterator를 반환합니다.

 


end()

vector<int> vec { 1, 2, 3, 4, 5, 6 };
auto it = vec.end();

 vector에서 마지막 요소의 iterator를 반환합니다.

 


push_back(value)

vector<int> vec { 1, 2, 3, 4, 5, 6 };
vec.push_back(7); // 컨테이너는 { 1, 2, 3, 4, 5, 6, 7 } 상태임

 vector의 가장 뒤에 요소를 추가합니다.

 


pop_back(value)

vector<int> vec { 1, 2, 3, 4, 5, 6 };
vec.pop_back(); // 컨테이너는 { 1, 2, 3, 4, 5 } 상태임

 vector의 마지막 요소를 제거합니다.

 


insert(pos, value)

vector<int> vec { 1, 2, 3, 4, 5, 6 };
vec.insert(vec.begin() + 2, 0); // 인덱스 2번 자리에 0을 삽입
// 컨테이너는 { 1, 2, 0, 3, 4, 5, 6 } 상태임

 vector에서 특정 위치에 값을 삽입합니다.

  • pos는 값을 넣을 위치의 iterator를 나타냅니다.

 


erase(pos)

vector<int> vec { 1, 2, 3, 4, 5, 6 };
vec.erase(vec.begin() + 2); // 인덱스 2번의 요소를 삭제합니다.
// 컨테이너는 { 1, 2, 4, 5, 6 } 상태입니다.

 vector에서 특정 위치의 값을 삭제합니다.

  • pos는 값을 삭제할 위치의 iterator를 나타냅니다.

 


erase(first, last)

vector<int> vec { 1, 2, 3, 4, 5, 6 };
vec.erase(vec.begin(), vec.begin() + 2); // 컨테이너는 { 3, 4, 5, 6 } 상태입니다.

 vector에서 특정 요소 범위의 값을 삭제합니다.

  • first는 삭제할 범위의 첫 iterator를 나타냅니다.
  • last는 삭제할 범위의 마지막 iterator를 나타냅니다.

 


clear()

vector<int> vec { 1, 2, 3, 4, 5, 6 };
vec.clear(); // 컨테이너는 { } 상태임

  vector의 모든 요소를 삭제합니다.

 


swap(vector)

vector<int> vec1 {  1,  2,  3,  4,  5,  6 };
vector<int> vec2 { 11, 22, 33, 44, 55, 66 };
vec1.swap(vec2);
// vec1 컨테이너는 { 11, 22, 33, 44, 55, 66 } 상태임
// vec2 컨테이너는 {  1,  2,  3,  4,  5,  6 } 상태임

 vector의 모든 요소를 교환합니다.

 

반응형
'C | C++/STL' 카테고리의 다른 글
  • [C++] std::queue
  • [C++] std::stack
  • [C++] std::list
  • [C++] std::array
HYEOKJUN
HYEOKJUN
프로그래밍 관련 수업이나 웹 사이트에서 직접 얻은 정보를 공유하는 블로그입니다. (일부 잘못된 정보가 포함될 수 있습니다)
  • HYEOKJUN
    HYEOKJUN
    HYEOKJUN
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • UNITY (18)
        • Tool (9)
        • Script (9)
      • C | C++ (20)
        • Basic (11)
        • STL (8)
        • ETC (1)
      • C# (1)
        • Basic (0)
        • ETC (1)
      • Python (8)
        • Basic (7)
        • Library (1)
        • ETC (0)
      • WEB (2)
        • Basic (2)
      • Skill (0)
        • 자료구조 (0)
      • Workspace (0)
      • ETC (4)
  • 블로그 메뉴

    • 인기 글

    • 태그

      stack
      C++
      Python
      vector
      Localization
      C#
      queue
      while
      컨테이너
      식별자
      조건문
      포인터
      변수
      Package
      Unity
      반복문
      std
      C
      자료형
      red-black tree
    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    HYEOKJUN
    [C++] std::vector
    상단으로

    티스토리툴바