std::vector로 배우는 레벨업 #2
std::vector로 배우는 레벨업 #1에 이어서…
resize를 구현해 보자
void resize(size_t newSize)
{
// 공간을 확보
reserve(newSize);
// 늘어난 사이즈만큼 생성자를 호출
for (size_t i = _size; i < newSize; ++i)
{
auto p = _data + i;
new(p) T();
}
// 줄어든 사이즈만큼 소멸자를 호출
for (size_t i = newSize; i < _size; ++i)
{
auto p = _data + i;
p->~T();
}
_size = newSize;
}
아래 테스트 코드를 통해 동작을 확인해보자.
std::cout << "std::vector<Foo> :" << std::endl;
std::vector<Foo> stdVec;
stdVec.resize(3);
stdVec.resize(1);
std::cout << std::endl;
std::cout << "MyVector<Foo> :" << std::endl;
MyVector<Foo> myVec;
myVec.resize(3);
myVec.resize(1);