정적 배열(array)에 대응하는 동적 배열(dynamic array)에 해당
(python 리스트 같은 거)
❓왜 vector일까?
STL → 데이터 구조에 대해 직관적이고 수학적 개념에서 영감
1. 수학적 벡터의 배열성
메모리 상에서 데이터 연속 저장
2. 순서와 연산 가능성
연속된 데이터를 다루며 연산 지원
3. 추상적인 방향성
데이터가 어떤 방향으로 나아가는 순차적인 흐름
#include <vector>
using namespace std;
/*---------------------------생성 및 초기화---------------------------*/
vector<int> v; //비어 있는 벡터
vector<int> v1(5, 10); //크기가 5이고, 모든 요소가 10으로 초기화된 벡터
vector<int> v2 ={1, 2, 3, 4}; //리스트 초기화
v1 = {1, 2, 3};
v2(v1); //v1을 복사하여 v2 생성
vector<int> sub(v2.begin(), v2.begin()+3); //{1, 2, 3}
/*---------------------------크기 관련 메서드---------------------------*/
vector<int> v = {1, 2, 3};
cout << v.size(); //3
cout << v.empty(); //false
v.resize(5, 0); //크기를 5로 늘리고, 새 요소는 0으로 초기화
v.capacity(); // 현재 할당된 메모리 공간
v.reserve(10); //최소한 10개의 요소를 담을 수 있도록 메모리 예약
/*---------------------------요소 추가 및 삭제---------------------------*/
vector<int> v = {1, 2, 3};
v.push_back(4);
v.insert(v.begin() + 1, 99);
v.insert(v.end(), {6, 7, 8});
v.pop_back(); //마지막 요소 제거
v.erase(v.begin() +2); // 세번째 요소 제거
v.erase(v.begin(), v.begin()+2); // 처음 두 개 요소 제거
v.clear(); //벡터를 비움
/*---------------------------접근---------------------------*/
cout << v[0]; //첫 번째 요소
cout << v.at(0); //범위 검사 포함한 안전한 접근
//첫번째 및 마지막 요소
cout << v.front(); //첫 번째 요소
cout << v.back(); //마지막 요소
//반복자로 접근
for(auto it = v.begin(); it != v.end(); ++it){
cout << *it << "";
}
/*---------------------------정렬 및 검색---------------------------*/
#include <algorithm>
sort(v.begin(), v.end()); //오름차순 정렬
sort(v.rbegin(), v.rend()); //내림차순 정렬
//검색
if(find(v.begin(), v.end(), 3) != v.end()){
cout << "3이 벡터에 존재합니다.";
}
//이진 검색(정렬된 상태에서)
if(binary_search(v.begin(), v.end(), 3)){
cout << "3이 벡터에 존재합니다.";
}
/*---------------------------그 외---------------------------*/
//동적 메모리 관리
v.shrink_to_fit(); // 벡터의 크기와 용량을 일치시켜 메모리 최적화
//2차원 벡터
vector<vector<int>> matrix(3, vector<int>(4, 0)); // 3x4 행렬 생성, 초기값 0
matrix[0][1] = 5; // 첫 번째 행, 두 번째 열에 5 할당
//람다 사용
for_each(v.begin(), v.end(), [](int& n) { n *= 2; }); // 모든 요소를 2배로