使用swap 回收多余空间
#include<vector>
#include<iostream>
using namespace std;
int main(){
vector<int> v;
for (int i = 0; i < 100000; ++i) {
v.push_back(i);
}
cout<<v.size()<<endl; //100000
cout<<v.capacity()<<endl; //131072
v.resize(3);
cout<<v.size()<<endl; //3
cout<<v.capacity()<<endl; //131072 //占用空间未变
//使用swap 回收多余的空间
vector<int>(v).swap(v); //匿名对象:匿名对象执行完会立马释放
//v.shrink_to_fit(); 使用内部成员方法回收也可以
cout<<v.size()<<endl; //3
cout<<v.capacity()<<endl; //3
return 0;
}
使用reserve 预留空间,减少内存开辟消耗
int main(){
vector<int> v;
int * p = nullptr;
v.reserve(100000); // 预留空间,减少开辟空间次数
/***
* 每次插入元素都会重新申请内存,导致内存浪费
* size==capacity()时,重新申请内存,然后做值拷贝,浪费时间
* reserve()预留空间,减少重新申请内存次数(容器预留len个元素长度,预留位置不初始化,元素不可访问)
*/
size_t count= 0;//开辟内存次数
for(int i=0;i<100000;i++){
v.push_back(i);
if(p!=&v[0]){
p=&v[0];
count++;
}
}
cout<<"开辟内存次数"<<( count)<<endl;
return 0;
}
随机数生成
#include<random>
int gen_random(int min, int max)
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(min, max);
return dis(gen);
}
标签:std,技巧,int,c++,内存,预留,include,gen
From: https://www.cnblogs.com/paylove/p/18320855