🚀 C++ 벡터(Vector) 완벽 정리

2025. 2. 24. 15:46프론트엔드/Next JS

728x90

🚀 C++ 벡터(Vector) 완벽 정리

📌 벡터(Vector)란?

C++의 vector는 동적 배열(Dynamic Array)로, 크기가 자동으로 조정되는 배열을 제공합니다.
std::vector는 **STL(Standard Template Library, 표준 템플릿 라이브러리)**에 포함되어 있으며, 배열보다 더 강력하고 유연한 기능을 제공합니다.


1️⃣ 벡터 선언 및 기본 사용법

🔹 벡터 선언

#include <iostream>
#include <vector>  // 벡터를 사용하려면 반드시 포함

using namespace std;

int main() {
    vector<int> A;  // 정수형 벡터 선언
    vector<double> B; // 실수형 벡터 선언
    vector<string> C; // 문자열 벡터 선언

    return 0;
}
  • vector<int> A; → 정수형 벡터 A 선언
  • vector<double> B; → 실수형 벡터 B 선언
  • vector<string> C; → 문자열 벡터 C 선언

2️⃣ 벡터 초기화 및 크기 지정

🔹 벡터 초기화 방법

vector<int> A(5);  // 크기가 5인 벡터 (0으로 초기화)
vector<int> B(5, 10);  // 크기가 5이고 모든 요소가 10으로 초기화
vector<int> C = {1, 2, 3, 4, 5}; // 리스트 초기화
vector<int> D{1, 2, 3, 4, 5}; // 리스트 초기화 (C++11 이후)
  • vector<int> A(5); → 크기가 5이며 모든 요소가 0으로 초기화됨.
  • vector<int> B(5, 10); → 크기가 5이며 모든 요소가 10으로 초기화됨.
  • vector<int> C = {1, 2, 3, 4, 5}; → 특정 값으로 초기화 가능.

3️⃣ 벡터 주요 함수

🔹 요소 추가 (push_back)

vector<int> A;
A.push_back(10);  // A = {10}
A.push_back(20);  // A = {10, 20}
A.push_back(30);  // A = {10, 20, 30}
  • push_back(value) → 벡터의 마지막에 값 추가.

🔹 요소 삭제 (pop_back)

A.pop_back();  // 마지막 요소(30) 제거, A = {10, 20}
  • pop_back() → 벡터의 마지막 요소 제거.

4️⃣ 벡터 요소 접근 방법

🔹 배열처럼 [] 연산자 사용

cout << A[0] << endl; // 첫 번째 요소 출력
  • A[0] → 배열처럼 접근 가능.

🔹 .at(index) 함수 사용

cout << A.at(1) << endl;
  • A.at(index) → 예외 처리가 포함된 안전한 접근 방법.
    • A[1]과 동일하지만, 범위를 벗어나면 예외 발생 (out_of_range 오류).

5️⃣ 벡터 크기 관련 함수

cout << A.size() << endl;  // 현재 벡터 크기
cout << A.capacity() << endl;  // 현재 할당된 메모리 크기
cout << A.empty() << endl;  // 비어있는지 확인 (true/false)
  • .size() → 현재 벡터의 요소 개수 반환.
  • .capacity() → 메모리가 얼마나 할당되었는지 확인.
  • .empty() → 벡터가 비어 있는지 확인 (true or false).

6️⃣ 벡터 삽입 및 삭제

🔹 특정 위치에 요소 삽입 (insert)

vector<int> A = {1, 2, 3, 4, 5};
A.insert(A.begin() + 2, 99); // 2번 인덱스에 99 삽입
// A = {1, 2, 99, 3, 4, 5}
  • A.insert(A.begin() + index, value) → 특정 위치에 요소 추가.

🔹 특정 위치의 요소 삭제 (erase)

A.erase(A.begin() + 1); // 인덱스 1 요소 제거
// A = {1, 99, 3, 4, 5}
  • A.erase(A.begin() + index) → 특정 위치 요소 삭제.

7️⃣ 벡터 정렬

🔹 sort() 함수 사용

#include <algorithm>  // sort()를 사용하기 위해 필요
vector<int> A = {3, 1, 4, 1, 5, 9};
sort(A.begin(), A.end()); // 오름차순 정렬
// A = {1, 1, 3, 4, 5, 9}
  • sort(A.begin(), A.end()); → 벡터를 오름차순 정렬.
  • sort(A.rbegin(), A.rend()); → 내림차순 정렬.

8️⃣ 벡터 전체 삭제 (clear)

A.clear();  // 모든 요소 삭제
cout << A.size();  // 0 출력
  • .clear() → 모든 요소 삭제, 크기 0으로 설정.

📌 코드 분석 (제공된 코드)

🔹 제공된 코드에서 중요한 벡터 함수들

A[4] = -5;  // 5번째 요소를 -5로 설정

A.pop_back();  // 마지막 요소 제거
A.erase(A.begin() + 3);  // 3번째 요소 제거

cout << A.size() << endl;  // 벡터 크기 출력
cout << A.front() << endl;  // 첫 번째 요소 출력
cout << A.back() << endl;  // 마지막 요소 출력
cout << A[3] << endl;  // 4번째 요소 출력
cout << A.at(5) << endl;  // 6번째 요소 출력 (예외 발생 가능)

A.clear();  // 모든 요소 삭제

🔵 코드 분석

  1. A.pop_back();
    • 마지막 요소를 제거.
  2. A.erase(A.begin() + 3);
    • 3번째 요소를 삭제.
  3. cout << A.size();
    • 현재 벡터의 크기를 출력.
  4. cout << A.front();
    • 첫 번째 요소를 출력.
  5. cout << A.at(5);
    • 예외가 발생할 가능성이 있음! (std::out_of_range 오류).

🎯 정리

✅ vector는 배열보다 동적 크기 조정이 가능하고, 메모리 관리가 자동으로 이루어짐.
✅ push_back(), pop_back(), insert(), erase() 등을 사용하여 손쉽게 요소 추가/삭제 가능.
✅ at(index)를 사용하면 안전한 접근 가능 (예외 발생 가능).
✅ sort() 함수를 이용하여 오름차순, 내림차순 정렬 가능.
✅ clear()를 사용하면 모든 요소 삭제.


🎯 벡터를 사용하면 좋은 상황

배열처럼 크기가 고정되지 않고 가변적인 데이터 구조가 필요할 때
배열보다 유연하게 데이터 삽입/삭제가 필요한 경우
STL의 강력한 기능(sort, find, reverse)을 활용하고 싶을 때


🎯 추가 학습 자료


🚀 이제 C++ 벡터를 마스터하고, 더욱 효율적인 코드를 작성하세요! 💪🎯

728x90