如何在 c++ 中清除矢量容量?

How to clear Vector capacity in c++?

本文关键字:容量 清除 c++      更新时间:2023-10-16

面试官在我的一次面试中问了我这个问题。我认为没有办法清除矢量的容量。谁能证实这一点?

你需要shrink_to_fit

尽管它不保证呼叫会得到遵守。

请求删除未使用的容量。

将容量((减少到大小((是一个不具约束力的请求。这取决于 关于请求是否得到满足的实现。

此代码可能会也可能不会工作,具体取决于实现(尽管适用于大多数实现(

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

std::vector试图向您隐藏存储的抽象。对于大多数用例,您无需知道容量如何增长或缩小。但众所周知,面试官不会在乎真实的用例。

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

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