본문 바로가기
STL

[C언어/C++] STL: Vector 사용법 총 정리: 개념, 주요함수, 예제코드

by Best Coding 2024. 12. 23.
반응형

STL vector 총 정리

 

 C++에서 vector는 가장 기본이 되는 동적 배열입니다. 크기가 자동으로 조정되며, 배열과 달리 메모리를 직접 관리할 필요가 없습니다. 오늘은 vector의 모든 사용법을 C 스타일 입출력과 함께 정리해보겠습니다.


1. Vector란?

  • C++ STL에서 제공하는 동적 배열입니다.
  • 크기가 자동으로 조정되며, 삽입, 삭제, 접근이 간편합니다.
  • 다양한 메서드를 제공하며, 코드 작성의 생산성을 높여줍니다.

 

2. Vector 선언과 초기화

기본 선언

#include <vector>
#include <stdio.h>
using namespace std;

int main() {
    vector<int> v; // 빈 벡터 선언
    return 0;
}

초기화 방법

#include <vector>
#include <stdio.h>
using namespace std;

int main() {
    vector<int> v1(5);          // 크기가 5인 벡터 (0으로 초기화)
    vector<int> v2(5, 10);      // 크기가 5인 벡터 (모든 값이 10)
    vector<int> v3 = {1, 2, 3}; // 리스트 초기화

    return 0;
}

 

반응형

3. Vector 주요 메서드

push_back()와 pop_back()

  • push_back(): 벡터의 끝에 요소를 추가합니다.
  • pop_back(): 벡터의 마지막 요소를 제거합니다.
#include <vector>
#include <stdio.h>
using namespace std;

int main() {
    vector<int> v;
    v.push_back(10);
    v.push_back(20);
    printf("v[0]: %d, v[1]: %d\n", v[0], v[1]);

    v.pop_back();
    printf("Size after pop_back: %zu\n", v.size());

    return 0;
}

 

size()와 capacity()

  • size(): 벡터에 저장된 요소의 개수를 반환합니다.
  • capacity(): 벡터의 현재 용량을 반환합니다.
#include <vector>
#include <stdio.h>
using namespace std;

int main() {
    vector<int> v(10, 5); // 크기 10, 값 5로 초기화
    printf("Size: %zu, Capacity: %zu\n", v.size(), v.capacity());

    v.push_back(15);
    printf("Size: %zu, Capacity: %zu\n", v.size(), v.capacity());

    return 0;
}

 

 

clear()와 empty()

  • clear(): 모든 요소를 제거합니다.
  • empty(): 벡터가 비어 있는지 확인합니다.
#include <vector>
#include <stdio.h>
using namespace std;

int main() {
    vector<int> v = {1, 2, 3};
    printf("Before clear: Size: %zu\n", v.size());

    v.clear();
    printf("After clear: Size: %zu, Is empty: %d\n", v.size(), v.empty());

    return 0;
}

 

4. Vector 탐색과 반복자

반복자 사용

  • begin(): 첫 번째 요소를 가리키는 반복자 반환
  • end(): 마지막 요소의 다음을 가리키는 반복자 반환
#include <vector>
#include <stdio.h>
using namespace std;

int main() {
    vector<int> v = {10, 20, 30};
    for (auto it = v.begin(); it != v.end(); ++it) {
        printf("%d ", *it);
    }
    printf("\n");

    return 0;
}

 

참고) auto에 대한 설명: auto반복자의 정확한 타입을 추론하여 간결한 코드 작성을 도와줍니다. 위의 코드에서 it std::vector<int>::iterator로 추론됩니다.

 

범위 기반 for문

#include <vector>
#include <stdio.h>
using namespace std;

int main() {
    vector<int> v = {10, 20, 30};
    for (int num : v) {
        printf("%d ", num);
    }
    printf("\n");

    return 0;
}

 

5. Vector 정렬과 알고리즘

정렬(Sort)

  • STL의 sort()를 사용해 벡터를 정렬할 수 있습니다.
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;

int main() {
    vector<int> v = {30, 10, 20};
    sort(v.begin(), v.end());

    for (int num : v) {
        printf("%d ", num);
    }
    printf("\n");

    return 0;
}

 

역순 정렬(Descending Order)

#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;

int main() {
    vector<int> v = {30, 10, 20};
    sort(v.begin(), v.end(), greater<int>());

    for (int num : v) {
        printf("%d ", num);
    }
    printf("\n");

    return 0;
}

 

6. 기타 유용한 메서드

resize()

  • 벡터의 크기를 변경합니다.
#include <vector>
#include <stdio.h>
using namespace std;

int main() {
    vector<int> v = {1, 2, 3};
    v.resize(5, 0); // 크기를 5로 조정하고 새 값은 0으로 초기화

    for (int num : v) {
        printf("%d ", num);
    }
    printf("\n");

    return 0;
}

 

erase()와 insert()

  • erase(): 특정 위치의 요소 제거
  • insert(): 특정 위치에 요소 삽입
#include <vector>
#include <stdio.h>
using namespace std;

int main() {
    vector<int> v = {1, 2, 3, 4};
    v.erase(v.begin() + 1); // 두 번째 요소 제거

    v.insert(v.begin() + 1, 10); // 두 번째 위치에 10 삽입

    for (int num : v) {
        printf("%d ", num);
    }
    printf("\n");

    return 0;
}

 

반응형

댓글