专门研究 std::vector 如何增长

use*_*862 6 c++ stdvector

C++ 标准建议 std::vector 呈指数增长,以便在重新分配方面具有“摊销不变成本”。

虽然这种类型的增长适用于大多数场景,但可能有一种情况我发现我需要使用不同的算法来增长向量。

有没有办法自定义 std::vector 的增长方式以及它在重新分配之前检查的条件?

小智 2

就像HolyBlackCat的评论一样,你无法改变它。其中STL向量实现的部分代码来自VC++。

size_type _Calculate_growth(const size_type _Newsize) const {
    // given _Oldcapacity and _Newsize, calculate geometric growth
    const size_type _Oldcapacity = capacity();

    if (_Oldcapacity > max_size() - _Oldcapacity / 2) {
        return _Newsize; // geometric growth would overflow
    }

    const size_type _Geometric = _Oldcapacity + _Oldcapacity / 2;

    if (_Geometric < _Newsize) {
        return _Newsize; // geometric growth would be insufficient
    }

    return _Geometric; // geometric growth is sufficient
}
Run Code Online (Sandbox Code Playgroud)