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
insert
vsemplace
✏️ 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());