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 @ 2024-07-24 14:34  一个小笨蛋  阅读(3)  评论(0编辑  收藏  举报