考虑到我们有一个std::vector
,并且要编写它,使其大小==容量。
vector<int> V;
for(int i=0; i<10; ++i)
{
V.push_back(i);
}
std::cout<<V.size()<<" "<<V.capacity()<<endl;
因此,此输出为 10 13 (通过定义实现,我使用VS2017)。
如何以大小==容量的方式重新分配向量?
答案 0 :(得分:4)
自C ++ 11起,shrink_to_fit()
有一个std::vector
方法。我建议使用而不是交换技巧。不过请注意,shrink_to_fit()
是一个要求
图书馆的实施可能无法兑现。
将Capacity()减小为size()是非绑定请求。这取决于 关于执行是否满足请求的说明。
有关更多详细信息,请参见https://en.cppreference.com/w/cpp/container/vector/shrink_to_fit
答案 1 :(得分:1)
这是Scott Meyers的有效STL书中描述的一个技巧。
该技巧称为“缩小适应”,或者称为作者交换技巧。
std::vector<int>(V).swap(V);
这个想法很简单,我们创建一个V的临时副本,其大小为== capacity,然后用实际的V对其进行拍打。这很简单。
vector<int> V;
for(int i=0; i<10; ++i)
{
V.push_back(i);
}
std::cout<<V.size()<<" "<<V.capacity()<<endl;
std::vector<int>(V).swap(V);
std::cout<<V.size()<<" "<<V.capacity()<<endl;
现在此代码的输出为:
10 13
10 10
注意:此技巧也适用于
std::string and std::deque