[C++] vector

다곰·2022년 10월 1일
0

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 vs emplace

✏️ vector에 대한 복사생성자와 move

push_back() 함수는 값을 넣는 과정에서 복사생성자를 호출

insert 의 경우, 모든 값들을 새로운 메모리에 복사한 후 해당 자리에 값을 넣음
때문에 복사생성자로 인한 오버헤드가 커지게 되며 성능 저하 야기

but emplaceemplace_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());  

🔗 [C++] 2차원 vector 초기화

profile
다교미의 불꽃 에러 정복기

0개의 댓글