vector 컨테이너는 C++에서 자주 사용되는 컨테이너로 GeeksforGeeks에서는 다음과 같이 정의되어 있습니다 :
벡터는 요소가 삽입되거나 삭제 될 때 자동으로 크기를 조정할 수 있는 동적 배열과 동일하며 컨테이너에서 자동으로 처리합니다. 벡터 요소는 반복자를 사용하여 액세스하고 통과 할 수 있도록 인접한 저장소에 저장됩니다. 벡터에서는 데이터가 끝에 삽입됩니다. 때때로 배열을 확장 할 필요가있을 수 있기 때문에 마지막에 삽입할 때 시간이 달라질 수 있습니다(differential time). 마지막 요소를 제거하면 크기 조정(resizing)이 발생하지 않으므로 상수 시간이 소요됩니다(또는 상수 시간 복잡도를 가집니다). 시작 또는 중간에 삽입하거나 및 제거하는 것은 선형 시간(linear in time)입니다.
Vector의 3요소는 다음과 같습니다.
Property :
1. ptr
2. size
3. Capacity
-> pushback()의 Time complexity는 항상 O(1)이 아닐 수 있다.
* 참고로 pushfront() 의 Time complexity는 O(n)이다.
왜냐하면
Memory Fragmentation (-> 프로그램을 잘못 짰을 때 일어남) 이 일어날 수 있기 때문!
원래는 참고로 heap에서 대부분 순차적으로 채워감.
그러나 , Memory Leak -> heap에 좀비처럼 Object가 상주하게 됨.. 의 문제도 있어서 저런 이유로 pushback()의 Time complexity는 항상 O(1)이 아닐 수 있다.
따라서
Vector를 사용할 떄는 가급적이면
reserve를 해주는 것이 좋다.
아래는 size를 잡아주는 경우에는 length만 변화 시키므로ㅓ
reserve까지 하는 예를 보여준다.
#include <iostream>
#include <vector>
using namespace std;
int main() {
std::vector<int> array { 0, 1, 2 };
array.resize(5); // set length to 5
std::cout << "The length is: " << array.size() << '\n';
array.reserve(10);
for (auto const &element: array) std::cout << element << ' ';
return 0;
}
아니면 추천은 emplace_back 을 쓰는 것이다.
'개발자 > C++(Linux, Window)' 카테고리의 다른 글
헤더 가드(Header guard) (0) | 2020.08.21 |
---|---|
Dynamic Array, L-value R-value (0) | 2020.08.17 |
모듈별 프로그래밍 , 정적/동적 라이브러리 (0) | 2020.08.14 |
멀티캐스트 주소체계 (0) | 2020.08.14 |
멀티캐스트 주소체계 (0) | 2020.08.14 |