📖
https://hwan-shell.tistory.com/119
📌 사용하려면
#include <vector>
using namespace std;
📌 반복문 돌려서 벡터의 원소 삭제할 때
for(int i=0; i<v.size(); i++){
if(v[i] == 3){
v.erase(v.begin()+i);
i--;
}
}
v.size()
(벡터의 크기)는 원소를 삭제할때마다 업뎃됨
i번째 요소를 삭제하면 원래 i+1번째였던 요소가 i번째가 되면서 원소들이 앞으로 하나씩 밀림
삭제한 경우에는 삭제 후 iterator를 한칸 앞으로 옮겨줘야 다음 원소를 조회할 수 있음
2056.cpp 참고
📌 resize 함수
1차원 벡터
vector<int> list;
list.resize(10); //벡터의 사이즈는 10, 모든 원소를 0으로 초기화
list.resize(5, 3); //벡터의 사이즈는 5, 모든 원소를 3으로 초기화
vector<int> list2= {1,2,3};
list2.resize(5); //list2 = {1,2,3,0,0}
벡터이름[index]
로 원소에 접근 가능2차원 벡터
vector< vector<int> > list;
list.resize(10, vector<int>(5, 1)); //1로 초기화된 5크기의 int형 단일 벡터가 10개
vector<int> list;
int size; //벡터 원소 개수
cin >> size;
list.resize(size); //벡터크기 size, 모든 원소는 0으로 초기화됨
cf. 배열에선 불가능
📌 fill 함수
#include <algorithm>
fill(채우고자 하는 자료구조의 시작위치, 채우고자 하는 자료구조의 끝위치, 채우고자 하는 값);
//채우고자 하는 자료구조의 끝위치 iterator는 포함하지 않음!!!
배열, 벡터에서 사용 가능
벡터
#include <algorithm>
/*1차원 벡터*/
vector<int> list(8);
fill(list.begin(), list.begin()+4, 7); //인덱스0~3까지 7로 할당
fill(list.begin()+4, list.end(), 3); //인덱스 4~끝까지 3으로 할당
/*2차원 벡터*/
vector<vector<bool>> visited;
fill(visited.begin(), visited.end(), vector<bool>(N, false)); //N은 벡터의 행 크기
배열
#include <algorithm>
int a[8] = {0,};
fill(a, a+4, 7); //인덱스 0~3까지 7로 할당
fill(a+4, a+sizeof(a)/sizeof(int), 3); //인덱스4~끝까지 3으로 할당
📌 2차원 벡터
선언과 동시에 할당
vector < vector<int> > v(int, vector<int>(3));
: 크기가 3인 벡터를 각각 원소로 갖는 2차원 벡터
vector < vector<int> > v(5, vector<int>(3, 1));
: 5개의 행, 3개의 열(값이 모두 1)인 2차원 벡터
(크기가 3이고 값이 모두 1인 벡터 5개를 원소로 갖는 벡터)
vector < vector<int> > v(5, vector<int>());
: 벡터를 원소로 갖는, 크기가 5인 2차원 벡터(5개의 행)
선언 후 할당
vector< vector<int> > v;
v.assign(5, vector<int>(3, 1));
//5개의행, 3개의 열(값이 모두 1)인 2차원벡터 공간 할당
vector< vector<int> > v; //2차원벡터 선언
vector<int> v_ele; //2차원벡터에 각 원소로 들어갈 1차원벡터를 선언해줘야 함
v.emplace_back(v_ele); //v[0]
v.emplace_back(v_ele); //v[1]
v[0].emplace_back(3); //v[0][0] == 3;
v[0].emplace_back(4); //v[0][1] == 4;
vector<vector<double>> v;
v.assign({
{0, 0}, //v[0][0]=0, v[0][1]=0
{0, 1}, //v[1][0]=0, v[1][1]=1
{1, 0},
{1, 1},
{0.5, 1},
{1, 0.5},
{0, 0.5},
{0.5, 0},
{0.5, 0.5}
});
접근
v[행][열]
태로 접근 for(int i=0; i<v.size(); i++){
for(int j=0; j<v[i].size(); j++){
cout << v[i][j];
}
cout << '\';
}
📌 vector<map>
**📌 assign 함수
벡터를 복사
void assign(InputIterator first, InputIterator last);
//first부터 last 바로 직전 원소까지
//기존 데이터는 삭제됨
vector<int> a {1,2,3,4,5}; //복사할 벡터
vector<int> b; //복사한 값이 들어갈 벡터
b.assign(a.begin(), a.end()); //a벡터 전체 복사
b.assign(a.begin()+2, a.begin()+4); //a벡터 인덱스2(값3)~인덱스3(값4)복사
b.assign(7, 100); //7개의 100로 할당(기존 데이터는 삭제)
📌 insert 함수
vector2.insert(vector2.end(), vector1.begin(), vector1.end());
//vector2의 끝에 vector1의 원소 전체가 덧붙여짐
//vector2.end() : 새 element가 삽입될 위치