Vector의 Iterators
v.begin() 백터 시작점의 주소 값 반환
v.end() 백터 (끝부분 + 1) 주소값 반환
v.rbegin() 백터의 끝 지점을 시작점으로 반환 말 그대로 reverse
v.rend() 백터의 (시작 + 1) 지점을 끝 부분으로 반환
Vector원소 접근
v.at(i) 백터의 i번째 원소 접근
v.front() 백터의 첫번째 원소 return
v.back() 백터의 마지막 원소 return
Vector원소 삽입
v.push_back() 백터의 마지막 부분에 새로운 원소 추가
v.pop_back() 백터의 마지막 원소 제거
v.insert(삽입할 위치의 주소 값, 변수 값) 사용자가 원하는 위치에 원소 삽입
v.emplace(삽입할 위치의 주소 값, 변수 값) 사용자가 원하는 위치에 원소 삽입(move로 인해 복사생성자 X)
v.emplace_back() 백터의 마지막 부분에 새로운 원소 추가
v.erase(삭제할 위치) or v.erase(시작위치, 끝위치) 사용자가 원하는 index값의 원소를 지우기
v.clear() 백터의 모든 원소를 지우기 return size = 0
v.resize(수정 값) 백터의 size 조정 ➡️ 범위 초과시 0으로 초기화)
v.swap(백터 변수) 백터끼리 swap
insertvsemplace
✏️ vector에 대한 복사생성자와 move
push_back() 함수는 값을 넣는 과정에서 복사생성자를 호출
insert 의 경우, 모든 값들을 새로운 메모리에 복사한 후 해당 자리에 값을 넣음
때문에 복사생성자로 인한 오버헤드가 커지게 되며 성능 저하 야기
but emplace와 emplace_back 의 경우 백터 내부에서 값들을 생성하기 때문에 생성자만 호출 됨
Vector Capacity
v.empty() 백터가 빈공간이면 true, 값이 있다면 false
v.size() 백터의 크기 반환
v.capacity() heap에 할당된 백터의 실제크기(최대크기) 반환
v.max_size() system에서 만들어 질 수 있는 벡터 최대 크기 반환
v.reserve(숫자) 백터의 크기 설정
v.shrink_to_fit() capacity의 크기를 백터의 실제 크기에 맞춤
✏️ reserve() 를 너무 크게 잡게되면 백터가 불필요하게 늘어나 메모리를 많이 잡아먹음
🔗 [C++] vector resize vs reserve
✏️ 따라서 남은 공간을 잡아주는 함수가 shrink_to_fit() 함수 ➡️ capacity() 크기 조정
❗️ 주의
clear() 로 백터의 값들을 지우게 되면 백터의 요소들은 없어지지만 capacity는 남아있음 ➡️ clear() 로 백터의 값들을 지운 후 다시 사용하지 않는다면 해당 백터의 메모리 공간은 잉여로 남음
vector
assgin함수
vector에 이전에 있었던 원소들은 모두 삭제하고, 인자로 받은 새로운 내용을 집어 넣기
assign(first, last);
✏️ 예시 code
vector new 의 처음부터 끝까지 vector v 에 삽입
vector<int> v;
vector<int> new;
v.assign(new.begin(), new.end());