如何清除c ++中的Vector容量?

时间:2018-10-05 08:21:35

标签: c++ vector stl

采访者在我的一次采访中向我提出了这个问题。我认为无法清除向量的容量。有人可以确认吗?

2 个答案:

答案 0 :(得分:5)

您需要shrink_to_fit

尽管不能保证一定能满足要求。

  

请求删除未使用的容量。

     

将Capacity()减小为size()是非绑定请求。这取决于   关于执行是否满足请求的说明。

此代码可能有效或可能无效,具体取决于实施方式(尽管在大多数实施方式中都适用)

template<typename T>
void ClearCapacityPleaseIfYouCan(std::vector<T> &v){
    v.resize(0);
    v.shrink_to_fit();
}

std::vector试图向您隐藏存储抽象。对于大多数用例,您不需要知道容量如何增长或缩小。但是后来知道,访问员不会对真实的用例表示怀疑。

答案 1 :(得分:0)

有一种方法:与空向量交换。

std::vector<T> vec_to_clear;
....
{
    std::vector<T> empty;
    std::swap(vec_to_clear, empty);
}