是否性病:: vector.pop_back()变化矢量的能力呢?(Does std::vector

2019-07-21 09:59发布

如果我分配的标准::矢量到一定的规模和容量使用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_backpop_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?