首页 > 编程语言 >c++ 《小技巧》

c++ 《小技巧》

时间:2024-07-24 14:41:14浏览次数:13  
标签:std 技巧 int c++ 内存 预留 include gen

使用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

相关文章

  • C/C++ 建议编译选项
    本文介绍一些OI选手可能用到的编译选项。警告选项在程序设计中,我们可能不小心写出一些不合常理的代码语句。大部分情况下,这会使程序行为脱离我们的本意。使编译器发出警告可以在一定程度下规避这种情况。-Wall启动常见的警告选项,包括但不限于:未使用的变量、函数或标签未......
  • C++ 打印菱形的程序(Program to print the Diamond Shape)
    给定一个数字n,编写一个程序来打印一个有2n行的菱形。例子:  //C++programtoprintdiamondshape//with2nrows #include<bits/stdc++.h>usingnamespacestd;//Printsdiamondpatternwith2nrows voidprintDiamond(intn) {   intspace=n......
  • 【简单易懂,复制可运行】C++通讯录管理系统实现增删改查
    自己写的300行c++通讯录管理系统,可以实现如下功能: 具体代码如下:#include<iostream>usingnamespacestd;#defineMax1000//不要分号//设计联系人结构体structPerson{ stringm_Name; intm_Sex; intm_Age; stringm_Phone; stringm_Addr; };//设计......
  • 【C++】string类(上)
    个人主页~string一、标准库中的string类1、什么是string类2、string类的常用接口讲解(1)string类的常见构造(2)string类的容量操作(3)string类对象的访问及遍历(4)string类对象的修改(5)string类非成员函数(6)其他(7)vs和g++下string结构说明vs下的string结构g++下string结构......
  • c++_爆刷n题
    P1089[NOIP2004提高组]津津的储蓄计划题目描述津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%20%......
  • 「技巧」对拍
    防挂分的爹7.23模拟赛打完:大黄:这Noi赛制真**,T3先交了次暴力,60pts,后来打了(他自以为的)正解,一分没有,为什么就不能取我最高分算啊ok,对拍的用处就体现出来了:防止我们像大黄一样**。对拍是干什么的对拍就是在防止自己代码打挂或者思路假而自己还不知道,所以自己随数造数据,用......
  • C++ 运算符重载的注意事项
    C++的运算符重载是一种强大的特性,它允许开发者为已存在的运算符赋予新的含义,以适应特定数据类型的需求。在使用运算符重载时,需要注意以下几点:不改变运算符原有语义:运算符重载应保持运算符原有的基本含义,避免引起混淆。例如,重载加法运算符+时,应确保其结果与常规加法操作相符。......
  • C++进阶 继承
    目录继承的概念及定义继承概念继承定义定义格式 继承关系和访问限定符 继承基类成员访问方式的变化基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数构造函数 拷贝构造函数 赋值运算符重载析构函数总结继承与友元继承与静态成员浅谈复杂的菱......
  • 通讯录管理系统(C++基础知识实现)
    通讯录管理系统描述:本人C++小白一枚,正在学习C++基础知识,给大家分享一款使用C++基础知识实现的通讯录管理系统,一起努力进步,大佬轻点喷。1.知识点(1)预处理器指令(#include,#define);(2)命名空间使用(usingnamespacestd;);(3)函数定义:定义了多个函数,如menu,addContact,show......
  • 二分答案解题技巧
    二分答案有一个很显著的特征:一定存在一个临界值,单调性只是临界值的一种,而不是全部。临界值,就是寻找第一个/最后一个满足要求的值,这又分别对应着两个完全不同的二分模板,这里做题时推荐使用“第一个满足要求的值”,即对应着STL中的upper_bound,手写板对应着这篇文章里讲的模板......