可以使用std :: vector capacity / size / reserve来手动管理向量内存分配吗?

时间:2014-04-26 11:55:13

标签: c++ vector standard-library c++98

我正在运行时间敏感的代码,并且需要一个方案来为我的向量在代码中的特定位置保留更多空间,在那里我可以知道(大约)将添加多少元素,而不是std do当载体已满时,它就适合我。

我还没有找到一种方法来测试它,以确保没有我不知道的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是一个估计值,保证等于或大于将要添加的元素的实际数量。实际添加元素的代码基于向量本身的容量执行操作,中途改变容量将产生不正确的结果。

1 个答案:

答案 0 :(得分:1)

是的,这会有用。

reserve

的定义
  

保证在调用reserve()之后发生的插入过程中不会发生重新分配,直到插入使向量的大小大于capacity()的值为止。