本文共 2639 字,大约阅读时间需要 8 分钟。
reserve预留存储空间,操作vector之前如果设置这个存储空间在插入数据时就节省了每次分配空间的时间resize改变容器可存储元素的个数。
#include#include #include using namespace std;typedef struct Personal2{ int m_age; int m_height; string m_name; ~Personal2() { //cout << "destructor~~~Personal=========age~" << m_age << endl; }}Person2;//resize, reserve对比使用测试void resize_reserve_Test(){ int count = 33;//214748 int nsize = 55; string name = string("床前明月光,疑似地上霜,举头望明月,低头思故乡。"); vector vec1; Person2 person; person.m_name = string("床前明月光,疑似地上霜,举头望明月,低头思故乡。"); cout << "resize_reserve_Test==========" < << 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.clear(); cout << endl; vec1.reserve(nsize);//设置容量为nsize for(int i = 0; i < count; i++) { person.m_age = i; person.m_height = i; vec1.emplace_back(person); } cout << "vec3.size=" << vec1.size() << " vec3.capacity=" << vec1.capacity() << endl; vec1.clear(); cout << endl; for(int i = 0; i < count; i++) { person.m_age = i; person.m_height = i; vec1.emplace_back(person); } cout << "vec4.size=" << vec1.size() << " vec4.capacity=" << vec1.capacity() << endl; vec1.clear(); cout << endl; vector vec2; vec2.reserve(count); for(int i = 0; i < count; i++) { person.m_age = i; person.m_height = i; vec2.push_back(person); } cout << "vec5.size=" << vec2.size() << " vec5.capacity=" << vec2.capacity() << endl; vec2.clear(); cout << endl; for(int i = 0; i < nsize; i++) { person.m_age = i; person.m_height = i; vec2.push_back(person); } cout << "vec6.size=" << vec2.size() << " vec6.capacity=" << vec2.capacity() << endl; vec2.clear(); cout << endl; for(int i = 0; i < nsize; i++) { person.m_age = i; person.m_height = i; vec2.push_back(person); } vec2.resize(count); cout << "vec7.size=" << vec2.size() << " vec7.capacity=" << vec2.capacity() << endl; vec2.clear(); cout << "vec8.size=" << vec2.size() << " vec8.capacity=" << vec2.capacity() << endl; cout << endl;}int main(){ //int = [-2147483648, 2147483647] resize_reserve_Test(); cout << endl; cout << "Hello World!" << endl; return 0;}
通过以上结果我们可知,reserve操作时,如果之前的vec已配了空间,这个时候再分配空间,这个值如果比之前的大,则会分配成功,如果分配的值比之前小,则vector的存储空间还是原来的大小。resize只是改变元素的个数,并不能改变存储空间的大小,
转载地址:http://vfiub.baihongyu.com/