std::vector은 C++ 표준 라이브러리(STL)에서 제공하는 동적 배열 자료구조이다.
- 크기가 동적으로 조정됨
- 배열과 비슷하지만, 더 강력한 기능 제공
- 메모리 관리가 자동으로 이루어짐
- 요소의 개수를 미리 알 수 없는 데이터를 다룰 때
- 복잡한 메모리 관리를 피하고 싶을 때
#include <vector>
using namespace std;
vector<int> v1; // 비어 있는 벡터
vector<int> v2(5); // 크기가 5인 벡터 (0으로 초기화)
vector<int> v3(5, 42); // 크기가 5이고, 모든 요소가 42로 초기화
vector<int> v4 = {1, 2, 3}; // 초기화 리스트
- 요소 추가 및 삭제: push_back(), pop_back()
- 요소 접근: operator[], at()
- 크기 확인: size(), capacity(), resize()
vector<int> v = {1, 2, 3};
v.push_back(4); // 4 추가
v.pop_back(); // 마지막 요소 삭제
cout << v[0] << " " << v.at(0) << endl; // 첫 번째 요소 출력
cout << v.size(); // 크기 출력
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 초기화된 벡터
vector<int> v;
// 1. 초기 상태
cout << "Initial state:" << endl;
cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << endl << endl;
// 2. reserve()로 용량 예약
v.reserve(10);
cout << "After reserve(10):" << endl;
cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << endl << endl;
// 3. 요소 추가 및 size() 변화 확인
v.push_back(1);
v.push_back(2);
v.push_back(3);
cout << "After adding 3 elements:" << endl;
cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << endl << endl;
// 4. resize()로 크기 증가 (기본값으로 초기화)
v.resize(6);
cout << "After resize(6):" << endl;
cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << endl;
cout << "Elements: ";
for (int x : v) {
cout << x << " "; // 기존 요소는 유지되고, 새로운 요소는 0으로 초기화됨
}
cout << endl << endl;
// 5. resize()로 크기 감소
v.resize(2);
cout << "After resize(2):" << endl;
cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << endl;
cout << "Elements: ";
for (int x : v) {
cout << x << " "; // 크기가 줄어들면서 뒤쪽 요소 삭제
}
cout << endl << endl;
// 6. reserve()와의 차이 확인
v.reserve(20);
cout << "After reserve(20):" << endl;
cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << endl << endl;
return 0;
}

- 중간 삽입: insert()
- 특정 위치 삭제: erase()
- 모든 요소 삭제: clear()
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// 초기 상태
vector<int> v = { 1, 2, 3 };
for (const auto& val : v)
cout << val << " ";
cout << endl;
// Insert
v.insert(v.begin() + 1, 42);
for (const auto& val : v)
cout << val << " ";
cout << endl;
// Erase
v.erase(v.begin());
for (const auto& val : v)
cout << val << " ";
cout << endl;
// Clear
v.clear();
return 0;
}

- begin(), end, rbegin(), rend()
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 벡터 초기화
vector<int> v = { 10, 20, 30, 40, 50 };
// 1. 정방향 출력 (begin() ~ end())
cout << "정방향 출력:" << endl;
for (auto it = v.begin(); it != v.end(); it++)
cout << *it << " "; // 출력: 10 20 30 40 50
cout << endl << endl;
// 2. 역방향 출력 (rbegin() ~ rend())
cout << "역방향 출력:" << endl;
for (auto it = v.rbegin(); it != v.rend(); it++)
cout << *it << " "; // 출력: 50 40 30 20 10
cout << endl;
return 0;
}

※ it앞에 '*'은 무엇인가?
- it: 반복자가 컨테이너의 현재 위치를 가져옴
- *it: 반복자가 가리키는 요소 값을 가져옴
for (const auto& val : v) {
cout << val << " ";
}
| 특 징 | 벡 터 (std::vector) | 배 열 (int[]) |
|---|---|---|
| 크 기 | 동적 조정 가능 | 고 정 |
| 메모리 관리 | 자 동 | 수 동 |
| 요소 접근 | O(1) | O(1) |
| 삽입/삭제 비용 | O(1) (끝), O(n) (중간) | N/A (크기 고정) |
vector<vector<int>> matrix(3, vector<int>(3, 0)); // 3x3 행렬
matrix[1][1] = 42;
vector<int> v = {3, 1, 4, 1, 5};
sort(v.begin(), v.end());
#include <iostream>
#include <vector>
#include <string>
#include <cctype> // for toupper
using namespace std;
// 2차원 벡터를 입력받아 대문자로 변환된 2차원 벡터 반환
vector<vector<string>> toUpperCase(const vector<vector<string>>& input)
{
vector<vector<string>> result = input; // 입력 벡터 복사
// 각 문자열을 대문자로 변환
for (auto& row : result) {
for (auto& col : row) {
for (auto& ch : col)
ch = toupper(ch);
}
}
return result; // 변환된 벡터 반환
}
int main() {
vector<vector<string>> table = {
{"Jeong", "30", "Seoul"},
{"Cho", "25", "Los Angeles"},
{"Jeon", "28", "Ansan"}
};
// 대문자로 변환된 2차원 벡터 생성
vector<vector<string>> upperTable = toUpperCase(table);
// 결과 출력
cout << "Original Table:" << endl;
for (const auto& row : table) {
for (const auto& col : row)
cout << col << "\t";
cout << endl;
}
cout << "\nUppercase Table:" << endl;
for (const auto& row : upperTable) {
for (const auto& col : row)
cout << col << "\t";
cout << endl;
}
return 0;
}
