我们知道vector的删除操作有clear,pop_back,erase,C++11还增加shrink_to_fit函数,那么他们的作用是什么呢?
clear清除所有内容,
pop_back移除末尾元素。
erase擦除元素,通过迭代器索引操作
shrink_to_fit释放未使用的存存减少内存的使用
下面是代码示例:
#include <iostream>
#include <vector>
#include <time.h>
using namespace std;
typedef struct Personal3
{
int m_age;
int m_height;
string m_name;
}Person3;
void erase_pop_back_Test()
{
cout << "erase_pop_back_Test==========" <<endl;
vector<int> vecInt;
vecInt.push_back(1073741824);
cout << "vecInt.max_size()=" << vecInt.max_size() << " vecInt[0]=" << vecInt[0] <<endl;
int count = 33;//214748
vector<Person3> vec1;
Person3 person;
person.m_name = string("床前明月光,疑似地上霜,举头望明月,低头思故乡。");
for(int i = 0; i < count; i++)//214748
{
person.m_age = i;
person.m_height = i;
vec1.push_back(person);
}
cout << "vec1.size=" << vec1.size() << " vec1.capacity=" << vec1.capacity() << endl;
cout << "start vec1.empty()====" << vec1.empty() << endl;
vec1.clear();
cout << "end vec1.empty()====" << vec1.empty() << endl;
cout << endl;
vec1.reserve(count);
for(int i = 0; i < count; i++)
{
person.m_age = i;
person.m_height = i;
vec1.emplace_back(person);
}
cout << "vec2.size=" << vec1.size() << " vec2.capacity=" << vec1.capacity() << endl;
vec1.shrink_to_fit();//释放未使用的空间
cout << "vec3.size=" << vec1.size() << " vec3.capacity=" << vec1.capacity() << endl;
vec1.erase(vec1.begin());
cout << "vec4.size=" << vec1.size() << " vec4.capacity=" << vec1.capacity() << endl;
vec1.pop_back();
cout << "vec5.size=" << vec1.size() << " vec5.capacity=" << vec1.capacity() << endl;
vec1.clear();
cout << "vec6.size=" << vec1.size() << " vec6.capacity=" << vec1.capacity() << endl;
vec1.shrink_to_fit();
cout << "vec7.size=" << vec1.size() << " vec7.capacity=" << vec1.capacity() << endl;
cout << endl;
}
int main()
{
//int = [-2147483648, 2147483647]
erase_pop_back_Test();
cout<< endl;
cout << "Hello World!" << endl;
return 0;
}
从以上结果看,clear,pop_back,earse只是删除内容,并不能删除vector的存储空间,C++11提供了shrink_to_fit可以清理存储空间。