std::vector로 배우는 레벨업 #2

·1분 c++programming

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);

#stl#template#vector