如果我分配的标准::矢量到一定的规模和容量使用resize()
和reserve()
在我的节目的开始,是有可能, pop_back()
可能“破发”的保留能力和事业的重新分配?
Answer 1:
第萎缩向量的能力的唯一途径是交换技巧
template< typename T, class Allocator >
void shrink_capacity(std::vector<T,Allocator>& v)
{
std::vector<T,Allocator>(v.begin(),v.end()).swap(v);
}
甚至不被保证按标准工作。 (虽然这是很难想象的实现它是行不通的。)
据我所知,C ++标准的下一个版本(曾经被认为的C ++ 0x,但现在变成了C ++ 1X)会有std::vector<>::shrink_to_fit()
Answer 2:
号pop_back()不会收缩向量的容量。 使用std::vector<T>(v).swap(v)
代替。
Answer 3:
下C ++ 11可以以减少的保留空间以向量的容量调用shrink_to_fit()来要求一个向量(以及一个双端队列或字符串)。 但是请注意,这是依赖于实现:它只是一个请求,而且也没有保证。 你可以试试下面的代码:
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> myVector;
for (auto i=1;i!=1e3;++i)
myVector.push_back(i);
cout << "Capacity: " << myVector.capacity() << endl;
myVector.reserve(2000);
cout << "Capacity (after reserving 2000): " << myVector.capacity() << endl;
myVector.shrink_to_fit();
cout << "Capacity (after shrink_to_fit): " << myVector.capacity();
}
Answer 4:
pop_XXX永远不会改变的能力。 如果您尝试推比容量允许更多的东西push_XXX可以改变的能力。
Answer 5:
没有。 相同push_back
, pop_back
不会影响capacity()
他们只是影响size()
编辑:
我应该说push_back
不会改变的能力,当v.size() < v.capacity()
Answer 6:
下面是STD的代码矢量:: :: pop_back()
void pop_back()
{ // erase element at end
if (!empty())
{ // erase last element
_Dest_val(this->_Alval, this->_Mylast - 1);
--this->_Mylast;
}
}
功能只调用析构函数,降低指针的最后一个元素。 代码VC(释放)。 因此,它不会对向量的容量(或重新分配)的影响。
文章来源: Does std::vector.pop_back() change vector's capacity?