[C++] STL 컨테이너 Vector 의 용도와 특징, 사용 예제

2023. 9. 1. 22:32·개발/C, C++
반응형

C언어에서 C++언어로 오면서 특징 중에 하나가 컨테이너입니다. STL에서 제공하는 여러 가지의 컨테이너에 대해서 알아볼 텐데 오늘은 가장 중요하고 많이 사용되는 Vector에 대해서 알아보도록 하겠습니다.

 

 

STL 컨테이너 Vector 의 용도와 특징, 사용 예제

 

c++ vector에 대해서

 

 

 Vector란

 

Vector는 순차적인 데이터를 저장하고 관리하는 데 사용됩니다. 예를 들어, 배열처럼 연속적인 메모리 공간에 데이터를 저장하며, 데이터를 추가, 삭제, 수정하거나 검색하는 작업을 효율적으로 수행할 수 있습니다.

즉 전통적인 C스타일의 배열과 매칭되는 컨테이너입니다. 

 

 

 

 Vector의 특징

 

동적 크기 조절
Vector는 크기를 동적으로 조절할 수 있기 때문에 초기에 얼마나 많은 요소가 필요한지 미리 알 필요가 없습니다. 이로써 메모리 관리에 대한 부담이 줄어들며, 프로그램이 런타임 중에 데이터 크기를 자유롭게 조절할 수 있습니다.

일반적으로 배열의 경우 선언시점에 사이즈를 정해놓아야 해서 메모리 측면에서 비효율적인 경우가 있습니다. 벡터는 어느 정도 할당된 상태에서 다이내믹하게 필요할 때 추가할 수 있습니다.

내부 구조
Vector는 배열과 비슷한 내부 구조를 가지고 있으며, 데이터 요소는 연속된 메모리 위치에 저장됩니다. 이로 인해 데이터에 빠르게 접근할 수 있으며, 인덱스를 사용하여 요소에 접근합니다. 또한, 메모리 할당 및 해제는 자동으로 처리되므로 개발자가 직접 관리할 필요가 없습니다.

 

 

 Vector 사용법

 

데이터 타입과 선언
Vector는 여러 데이터 타입을 저장할 수 있습니다. 예를 들어, 정수, 실수, 문자열, 사용자 정의 객체 등을 저장할 수 있습니다.

std::vector<int> intVector;         // 정수형 요소를 저장하는 vector
std::vector<double> doubleVector;   // 실수형 요소를 저장하는 vector
std::vector<std::string> strVector; // 문자열 요소를 저장하는 vector


요소 추가
Vector에 요소를 추가할 때, push_back() 함수를 사용합니다. 추가에 드는 시간복잡도는 이론적으로 O(1) 입니다.

하지만 힙에서 할당가능한 capacity를 초과하면 전체가 다른 위치로 옮겨가야 하므로 push back 도 O(n)이 될 수도 있습니다. 이를 보완하기 위해 vector.reserve(n)를 통해 어느 정도 공간을 미리 할당하는 것도 하나의 방법입니다.

intVector.push_back(42);
strVector.push_back("Hello");

 

요소를 추가하는 다른 방법으로 emplace_back() 이 있습니다. emplace_back과 push_back의 차이에 대해서는 조금 더 심화된 내용이므로 다른 포스팅에서 다루도록 하겠습니다.

 


요소 접근
Vector의 요소에 접근할 때, 인덱스를 사용합니다. 인덱스는 0부터 시작하며, at() 함수나 [] 연산자로 접근할 수 있습니다.

배열과 마찬가지로 인덱스로 바로 접근하므로 O(1) 시간만에 접근할 수 있습니다.

int value = intVector[0];     // 첫 번째 요소에 접근
double num = doubleVector.at(2); // 세 번째 요소에 접근


크기 확인
Vector의 크기는 size() 함수를 사용하여 확인할 수 있습니다.

int size = strVector.size();


요소 삭제
pop_back() 함수를 사용하여 Vector의 마지막 요소를 삭제할 수 있습니다.

intVector.pop_back();


범위 기반 반복
C++11부터는 범위 기반 for 루프를 사용하여 Vector를 쉽게 순회할 수 있습니다.

for (const auto& element : strVector) {
    std::cout << element << std::endl;
}



 

 결론

 

C++ Vector는 동적 배열을 효율적으로 다룰 수 있는 강력한 도구입니다. 크기를 동적으로 조절할 수 있고, 내부 구조가 배열과 유사하므로 데이터에 빠르게 접근할 수 있습니다. new/delete를 사용하는 것보다 vector를 활용하는 것이 메모리 leak을 방지할 수 있어서 더 좋습니다.

 




'개발 > C, C++' 카테고리의 다른 글

[C++] class 생성자에서 explicit 키워드의 의미  (0) 2023.09.05
[C++] STL 컨테이너 Set과 Map 활용법과 차이점  (0) 2023.09.02
[C++] 생성자에서 virtual 가상 함수 호출하는 경우의 문제  (0) 2023.08.11
[C++] 복사 생성자(Copy Constructor) 의 이해 및 활용  (1) 2023.07.27
[C++] 참조자 (reference) 의 정의, 사용법 및 주의 사항  (0) 2023.03.28
'개발/C, C++' 카테고리의 다른 글
  • [C++] class 생성자에서 explicit 키워드의 의미
  • [C++] STL 컨테이너 Set과 Map 활용법과 차이점
  • [C++] 생성자에서 virtual 가상 함수 호출하는 경우의 문제
  • [C++] 복사 생성자(Copy Constructor) 의 이해 및 활용
growing-dev
growing-dev
S/W 개발 관련 내용들과 취미나 육아, 맛집 등 관심 있는 내용을 공유하는 블로그입니다.
    반응형
  • growing-dev
    성장하는 개발자 블로그
    growing-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 개발
        • 개발 공통
        • 개발 환경
        • Git
        • 자료구조, 알고리즘
        • C, C++
        • Python
        • DevOps
        • CMake
      • 공부
        • 영어
        • 경제
      • 취미, 육아 N
        • 육아
      • 생활정보
  • 블로그 메뉴

    • 홈
  • 링크

    • growing-dev GitHub
  • 공지사항

    • [블로그 시작] 성장하는 개발자 스토리입니다.
  • 인기 글

  • 태그

    티스토리챌린지
    생산성
    git
    Clang
    VS Code
    CMake
    C++
    소프티어
    앨리웨이
    WSL
    오블완
    Python
    프로그래머스
    dfs
    키즈카페
    필스너
    하이볼
    오픽
    OPIC
    TDD
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
growing-dev
[C++] STL 컨테이너 Vector 의 용도와 특징, 사용 예제
상단으로

티스토리툴바