c++ 《小技巧》

使用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);
}
posted @   一个小笨蛋  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示