[C++] STL Vector 정리 + 사용법까지!
💚ref.
1. vector 클래스
2. 멤버 함수
더 많은 기능은 MS vector Functions 참고
2.1. Iterators
함수명 | 기능 |
---|---|
v.begin() |
v 의 첫 번째 원소에 대한 이터레이터 반환 |
v.end() |
v 의 마지막 원소 이터레이터 반환 |
비교 : begin
, rbegin
, cbegin
, crbegin
차이
2.2. Capacity
함수명 | 기능 |
---|---|
v.size() |
v 의 원소 개수 반환 |
v.max_size() |
v 의 최대 길이 반환 |
v.resize(size, val) |
v 의 크기를 size 로 설정. size 가 원래 크기보다 큰 경우 빈 공간을 val 로 채움 |
v.capacity() |
v 의 저장공간 길이(벡터가 포함할 수 있는 원소의 개수) |
v.empty() |
v 가 비어 있는지 유무 확인(bool ) |
v.reserve(size) |
v 에 할당할 최소 길이 |
shirink_to_fit |
v 의 빈 공간 삭제 |
2.3. Elem Access
함수명 | 기능 |
---|---|
v.at(idx) |
v 의 idx 번째 원소 참조 |
v.back() |
v 의 마지막 원소 참조 |
v.front() |
v 의 첫 번째 원소 참조 |
v.data() |
v 의 첫 번째 원소에 대한 포인터 반환 |
2.4. Modifiers
함수명 | 기능 |
---|---|
v.assign(size, val) v.assign(fisrt, last) |
기존 벡터 원소 제거 후 size 만큼의 val 원소 할당 혹은이터레이터 first 와 last 의 사잇값 모두 할당 |
v.push_back(val) |
v 마지막에 원소 추가 |
v.pop_back() |
v 의 마지막 원소 제거 |
v.insert(pos, cnt, val) |
pos 번째 위치부터 cnt 만큼 val 삽입 |
v.erase(pos) v.erase(first, last) |
v 의 pos 번째 원소 혹은 first 부터 last 까지의 원소 제거 |
v1.swap(v2) |
v1 과 v2 의 원소 교환 |
v.clear() |
v 의 원소 제거 |
v.emplace() |
push_back 효율 개선 |
2.4.1. push_back
vs emplace_back
함수 정리 도중 궁금해서 찾아본 push_back과 emplace_back 차이!
둘 다 벡터 말단에 객체를 삽입하는 방식은 같다. 두 함수의 어떤 동작에서 차이가 있을까?
먼저 push_back
함수는 외부에서 별도의 객체를 만들어 vector에 삽입한 후 해당 임시 객체를 삭제하는 반면, emplace_back
은 함수 내부에 생성자가 구현되어 있어 바로 객체를 생성하고 vector에 넘긴다. => 생성자/소멸자 count 감소!
vector의 원소를 다중 파라미터로 만들 경우(eg.vector<vector<int>>
) push_back
함수는 구조체를 선언해 vector에 넣어야 하고, emplace_back
은 내부에서 임의로 구조체를 생성해 할당하므로 별도의 구조체 선언을 요구하지 않는다.
단, 어떤 생성자가 선언되었는지 분명하지 않고 실수로 잘못된 파라미터를 입력해도 그대로 적용된다(오류로 판단하지 않음).
예를 들어 2차원 벡터에 상숫값을 집어넣어도 오류 로그를 출력하지 않고 그대로 벡터에 삽입된다.
(특정 위치에 상숫값을 삽입하지 않고 내부 함수 임의로 상수만큼의 벡터가 더 생성됨 => 개발자가 원하는 방향이 맞나?)
최적화된 최신 컴파일러를 사용하고 있다면 push_back
을 사용하는 것이 좋겠다.
Leave a comment