繁体   English   中英

可以使用std :: vector容量/大小/保留来手动管理矢量存储器分配吗?

[英]Can std::vector capacity/size/reserve be used to manually manage vector memory allocation?

我正在运行时间非常敏感的代码,因此需要一个方案来在代码的特定位置为我的向量保留更多空间,在这里我可以(大约)知道要添加多少个元素,而不是由std替我做当向量已满时。

我还没有找到一种测试方法来确保没有我不知道的std极端情况,因此我想知道向量的容量如何影响内存的重新分配。 更具体地说,下面的代码是否可以确保永远不会发生自动重新分配?

std::vector<unsigned int> data;
while (condition) {
    // Reallocate here
    // get_elements_required() gives an estimate that is guaranteed to be >= the actual nmber of elements.
    unsigned int estimated_elements_required = get_elements_required(...);
    if ((data.capacity() - data.size()) <= estimated_elements_required) {
        data.reserve(min(data.capacity() * 2, data.max_length - 1));
    }

    ...

    // NEVER reallocate here, I would rather see the program crash actually...
    for (unsigned int i = 0; i < get_elements_to_add(data); ++i) {
        data.push_back(elements[i]);
    }
}

estimated_elements_required在上面的代码是保证是等于或大于估计值,将要添加的元素的实际数量。 实际添加元素的代码根据向量本身的容量执行操作,中途更改容量将产生错误的结果。

是的,这将起作用。

reserve的定义:

可以保证在调用reserve()直到插入使向量的大小大于capacity()的值之前,在插入期间不会发生重新分配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM