std::vector
vector를 사용하면 동적 array를 사용하는 것보다 보다 편하게 프로그래밍을 할 수 있다. 아래와 같이 선언 및 초기화할 수 있다.
std::vector<int> array;
std::vector<int> array2 = { 1, 2, 3, 4, 5 };
std::vector<int> array3 { 1, 2, 3 };
vector::reserve
벡터를 사용할때 가능하면 reserve를 하는 것이 좋다. vector의 메모리 재할당이 비효율적으로 반복되는 것을 방지하기 때문에 성능상 이점이 있다.
vector를 처음 선언하면 capacity가 디폴트 크기로 설정된다. 그러다 push_back() 함수를 반복적으로 호출하여 element 수가 capacity를 초과하여 더 이상 저장이 불가능하면 메모리 재할당을 수행한다. 이러한 과정이 반복되면 그 때마다 vector 메모리 재할당 & 기존 element 복사을 수행한다.
미리 필요한 vector 크기를 알고 reserve를 하면 이러한 반복적인 재할당&복사를 방지할 수 있다. reserve한 vector의 총 크기는 capacity() 함수로 알 수 있다.
const int arr_len = 100;
std::vector<int> array;
array.reserve(arr_len);
cout << array.capacity() << endl; // 100
cout << array.size() << endl; // 저장된 element가 없으니 0이 출력되는 것에 주의
벡터 인덱싱
[] 연산자를 통한 인덱싱과 at() 함수를 사용한 인덱싱 모두 가능하다.
cout << array[0] << endl;
cout << array.at(0) << endl;
벡터의 장점?
사용도 간편하지만 무엇보다 별도의 메모리 할당, 해제가 필요 없다는 것이 장점이다. 스코프를 벗어나면 자동으로 할당이 해제되기 때문에 new, delete와 같은 별도의 키워드가 필요없고 메모리 누수의 가능성도 상대적으로 작다.
'C++ 학습' 카테고리의 다른 글
| [C++] call by reference (0) | 2023.11.24 |
|---|---|
| [C++] call by value (0) | 2023.11.24 |
| [C++] std::array (0) | 2023.11.24 |
| [C++] 다중 포인터 (0) | 2023.11.23 |
| [C++] void pointer (0) | 2023.11.23 |