C_C++

C++, <vector> 템플릿 이용하기

고니자니 2024. 11. 19. 16:50
반응형

<vector>은 C++ 표준 라이브러리에서 제공하는 동적 배열 컨테이너로, std::vector 클래스를 정의합니다. 동적 배열은 크기가 가변적이어서 런타임에 요소를 추가하거나 제거할 수 있습니다.

std::vector는 내부적으로 메모리를 효율적으로 관리하며, 배열과 유사한 방식으로 요소에 접근할 수 있는 기능을 제공합니다. 또한 자동으로 메모리를 재할당하면서 크기를 조정합니다.

 

주요 특징

  1. 동적 크기 조정
    요소를 추가하거나 제거할 때, 자동으로 크기를 조정합니다.
    (초기 용량이 초과되면 메모리를 재할당하여 더 큰 공간을 확보합니다.)
  2. 배열과 유사한 인덱싱
    요소에 배열처럼 인덱스를 통해 접근할 수 있습니다. (O(1) 시간 복잡도)
  3. STL과의 통합
    std::vector는 이터레이터를 지원하며, 다른 STL 알고리즘과 잘 통합됩니다.
  4. 안전한 메모리 관리
    메모리 할당 및 해제 작업이 자동으로 이루어져, 명시적인 동적 메모리 관리가 필요하지 않습니다.

주요 멤버 함수

  1. 생성자 및 소멸자
    • std::vector<T> v; : 빈 벡터 생성.
    • std::vector<T> v(n); : 크기가 n인 벡터 생성. 기본값으로 초기화.
    • std::vector<T> v(n, value); : 크기가 n이고, 모든 요소를 value로 초기화.
  2. 크기 및 용량
    • v.size() : 현재 요소 개수 반환.
    • v.capacity() : 할당된 메모리의 총 용량 반환.
    • v.resize(n) : 벡터 크기를 n으로 조정.
    • v.reserve(n) : 용량을 최소 n으로 설정.
  3. 요소 접근
    • v[i] 또는 v.at(i) : i번째 요소에 접근.
    • v.front() : 첫 번째 요소.
    • v.back() : 마지막 요소.
  4. 요소 추가 및 제거
    • v.push_back(value) : 맨 뒤에 value 추가.
    • v.pop_back() : 마지막 요소 제거.
    • v.insert(pos, value) : pos 위치에 value 삽입.
    • v.erase(pos) : pos 위치의 요소 제거.
    • v.clear() : 모든 요소 제거.
  5. 기타
    • v.empty() : 비어있는지 확인.
    • v.swap(other) : other 벡터와 데이터 교환.

예제

#include <iostream>
#include <vector>

int main() {
    std::vector<int> v; // 빈 벡터 생성

    // 요소 추가
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);

    // 요소 접근 및 출력
    for (size_t i = 0; i < v.size(); ++i) {
        std::cout << "v[" << i << "] = " << v[i] << std::endl;
    }

    // 크기 및 용량 확인
    std::cout << "Size: " << v.size() << std::endl;
    std::cout << "Capacity: " << v.capacity() << std::endl;

    // 요소 제거
    v.pop_back();
    std::cout << "After pop_back, Size: " << v.size() << std::endl;

    return 0;
}

(Output)

v[0] = 10
v[1] = 20
v[2] = 30
Size: 3
Capacity: 4
After pop_back, Size: 2

 

주의점

  1. 벡터의 크기가 증가할 때 내부적으로 메모리가 재할당되며, 이는 시간 비용이 발생할 수 있습니다. 이를 줄이기 위해 미리 reserve()를 호출해 용량을 확보할 수 있습니다.
  2. v[i]는 범위를 벗어난 접근에 대해 동작이 정의되지 않습니다. 대신 v.at(i)를 사용하면 예외를 발생시킵니다.

<vector>는 C++에서 가장 자주 사용되는 컨테이너 중 하나로, 다양한 상황에서 유용하게 활용됩니다.

 

반응형