C++常用总结

1、提高cin与cout效率

cin与cout效率相比于scanf与printf低下

解决方案:

ios:sync_with_stdio(false);
cin.tie(0),cout.tie(0);

2、C++标准算法库algorithm

  1. max(a,b):求两个数最大值
  2. min(a,b):求两个数最小值
  3. abs(a,b):求一个整型变量的绝对值
  4. swap(a,b):交换a和b的值
  5. reverse(a,a+5):翻转a到a+5区间(前包后不包)的数组、容器的值(a为a[5]地址)
  6. reverse(v.begin(),v.end()):翻转容器,则需要用到begin()、end()函数(或迭代器)
  7. sort(a,a+5):对a到a+5区间的数组、容器进行排序默认升序排列(a为a[5]地址)
  8. sort(v.begin(),v.end()):排序容器,则需要用到begin()、end()函数(或迭代器)
  9. count(a, a+5, x):在数组中查找x在某区间出现的次数(a为a[5]地址)、
  10. count(v.begin(),v.end(),x):容器中查找,则需要用到begin()、end()函数(或迭代器)
  11. __gcd(a,b):求最大公因数(二者乘积除以最大公因数即可得到最小公倍数)
  12. next_permutation(a,a+3):将给定区间的数组、容器全排列(容器全排列:将参数换成iterator迭代器或begin()end()函数)
#include<iostream>
#include<algorithm>
using namespace std;
int main() {  int a[3] = {1,2,3};do{cout<<a[0]<<a[1]<<a[2]<<endl; }while(next_permutation(a,a+3));	//输出1、2、3的全排列 return 0;} 
输出:
123
132
213
231
312
321

补充:

3、#include<cmath>中的fabs()函数还可用于求浮点型变量的绝对值

7、sort降序排序

bool cmp(int a, int b) {return a > b; 
}int main() {int a[5] = {55,44,33,22,11};sort(a,a+5,cmp);//这里需要加上自己自定义的函数}

3、memset函数

void *memset(void *dest, int c, size_t count);
dest是目标内存块的指针,c是要设置的内容,count是要设置的字节数。
该函数会将dest指向的内存块的前count个字节都设置为c

4、vector(向量)

在容器中,向量可以看成类似一维的存储形式或者理解为长度可变的数组

优点:

  • 尾插尾删效率很高
  • 支持随机访问(利用下标访问)
  • 相比链表结构。顺序表CPU高速缓存命中率更高(因为顺序表的底层由数组实现,物理地址是连续的)

缺点:

  • 头部和中部插入删除效率低(O(N))
  • 扩容:存在性能消耗和空间上的浪费
    //元素个数int size = vectorname.size();         //判断是否为空bool isEmpty = vectorname.empty();    //从vec1.back位置插入5个值为3的元素vectorname.insert(vectorname.end(),5,3);    //删除末尾元素vectorname.pop_back();              //删除之间的元素,其他元素前移vectorname.erase(vec1.begin(),vec1.end());//判断是否相等==、!=、>=、<=...cout<<(vectorname==vectorname)?true:false;  //获取迭代器首地址vector<int>::iterator iter = vectorname.begin();    //获取const类型迭代器vector<int>::const_iterator c_iter = vectorname.begin();   //清空元素vectorname.clear();                 

5、list(列表)

列表是用双向链表实现的,所谓的双向链表,指的是既可以从链表的头部开始搜索找到链表的尾部,也可以进行反向搜索,从尾部到头部

优点:

  • 任意位置插入删除效率很高。(O(1))
  • 按需申请和释放,优化了vector在空间上的浪费

缺点:

  • CPU高速缓存的命中率不高(物理地址空间不连续)
  • 不支持随机访问
构造空的list
list()	构造的list中包含n个值为val的元素
list (n, val)	拷贝构造函数
list (list& x)	用[first, last)区间中的元素构造list
list (first, last)	头插一个数据
push_front头删一个数据
pop_front尾插一个数据
push_back尾删一个数据
pop_back获取当前容器当中的元素个数
size判断当前容器是否为空
empty清空容器,清空后容器的size为0, 但是头结点(哨兵位)不会被清除
clear容器当中的数据默认排为升序
sort删除容器当中特定值的元素, 找到了就删(所有的都删除),没就不删
remove删除容器当中连续的重复元素进行去重
unique交换两个容器的内容
swap得到容器中第一个元素的正向迭代器
begin得到容器中最后一个元素的后一个位置的正向迭代器
end得到容器中最后一个元素的后一个位置的反向迭代器
rbegin得到容器中第一个元素的反向迭代器
rend获取list容器当中的第一个元素
front获取list容器当中的最后一个元素
back

list当中的insert函数支持三种插入方式:

  1. 在指定迭代器位置插入一个数,
  2. 在指定迭代器位置插入n个值为val的数,
  3. 在指定迭代器位置插入一段迭代器区间(左闭右开)
#include <iostream>
#include <algorithm>
#include <vector>
#include <list>
using namespace std;int main()
{list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);list<int>::iterator pos = find(lt.begin(), lt.end(), 2);lt.insert(pos, 9); //在2的位置插入9pos = find(lt.begin(), lt.end(), 3);lt.insert(pos, 2, 8); //在3的位置插入2个8vector<int> v(2, 7);pos = find(lt.begin(), lt.end(), 1);lt.insert(pos, v.begin(), v.end()); //在1的位置插入2个7}

erase

list当中的erase函数支持两种删除方式:

  1. 删除指定迭代器位置的元素,
  2. 删除指定迭代器区间(左闭右开)的所有元素,
#include <iostream>
#include <algorithm>
#include <vector>
#include <list>
using namespace std;int main()
{list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);lt.push_back(5);list<int>::iterator pos = find(lt.begin(), lt.end(), 2);lt.erase(pos); //删除2pos = find(lt.begin(), lt.end(), 4);lt.erase(pos, lt.end()); //删除4及其之后的元素return 0;
}

6、deque(双端队列)

一种双开口的“连续”空间的数据结构,从前后两端都可以进行数据的插入和删除操作,同时支持数据的快速随机访问

7、string(字符串)

与vector相似的容器。专门用于保存字符。随机访问快。尾部插入删除快

8、map(映射)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/650855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AssertionError: Torch not compiled with CUDA enabled

目录 报错查看已安装的torch的版本卸载安装GPU版本的torch查看cuda版本手工安装通过pip命令手工安装。 结果更新cuda到12.1大功告成 报错 经查阅&#xff0c;这个问题是因为conda默认安装的是CPU版本的torch&#xff0c;应该使用GPU版本的。 查看已安装的torch的版本 pip li…

SpringBoot整理-数据库操作

在 Spring Boot 中进行数据库操作是一项常见的任务。Spring Boot 提供了多种方式来集成和操作数据库,使得与数据库的交互更为简便和高效。以下是在 Spring Boot 中进行数据库操作的几种主要方式: 1. Spring Data JPA 介绍: Spring Data JPA 是 Spring Data 的一部分,它简化了…

Apipost数据库连接使用

Apipost提供了数据库连接功能&#xff0c;在接口调试时可以使用数据库获取入参或进行断言校验。目前的Apipost支持&#xff1a;Mysql、SQL Sever、Oracle、Clickhouse、达梦数据库、PostgreSQL、Redis、MongoDB 8种数据库的连接操作 新建数据库连接&#xff1a; 在「项目设置…

UDF学习(四)FLUENT UDF-DEFINE_PROFILE宏

基础知识&#xff1a; 利用DEFINE_PROFLILE可以指定以下边界或计算域信息&#xff1a;DEFINE_PROFILE(name,t,i)//既可以用解释型&#xff0c;也可以用编译型&#xff01; 主要用途&#xff1a; 边界速度、压力、温度、湍动能、湍流耗散率、质量流量&#xff1b;组分质量分数…

Doris 与 Clickhouse 对比(一)

1. 常用引擎 ☕️ Doris 表数据模型 duplicate key &#x1f3ac; 场景&#xff1a;适用于数据无需提前聚合的分析业务。 ⚠️ 注意点&#xff1a;只指定排序列&#xff0c;相同的行并不会合并。 unique key &#x1f3ac; 场景&#xff1a;适用于有更新需求的业务。 ⚠…

Optional lab: Linear Regression using Scikit-LearnⅠ

scikit-learn是一个开源的、可用于商业的机器学习工具包&#xff0c;此工具包包含本课程中需要使用的许多算法的实现 Goals In this lab you will utilize scikit-learn to implement linear regression using Gradient Descent Tools You will utilize functions from sci…

计算机设计大赛 垃圾邮件(短信)分类算法实现 机器学习 深度学习

文章目录 0 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 垃圾邮件(短信)分类算…

MySQL DDL DML DQL DCL 通用语法

文章目录 DDL&#xff08;数据定义语言&#xff09;数据库操作表操作 DML&#xff08;数据操作语言&#xff09;添加数据注意事项 更新和删除数据 DQL&#xff08;数据查询语言&#xff09;基础查询条件查询聚合查询&#xff08;聚合函数&#xff09;分组查询排序查询分页查询D…

计算机网络:体系结构知识点汇总

文章目录 一、计算机网络概述1.1概念及功能1.2组成和分类1.3性能指标 二、体系结构与参考模型2.1分层结构、协议、接口、服务2.2OSI参考模型2.3TCP/IP参考模型 一、计算机网络概述 1.1概念及功能 计算机网络就是通过各个节点&#xff0c;这个节点包括终端的电脑&#xff0c;手…

C语言内联汇编和混合编程,及如何利用汇编提高C语言的性能和功能

一、什么是内联汇编和混合编程 内联汇编&#xff08;inline assembly&#xff09;是指在C语言源代码中嵌入汇编语言指令&#xff0c;从而实现C语言和汇编语言的混合编程&#xff08;mixed programming&#xff09;。混合编程可以利用汇编语言的优势&#xff0c;如直接访问硬件…

0127-2-Vue深入学习5—Vue-Router路由模式

1、Vue-Router三种路由模式&#xff1a; hash&#xff1a;#️⃣使用URL hash 值来做路由&#xff0c;支持所有路由器&#xff1b;history:&#x1f4d6;依赖HTML5 History API和服务器配置&#xff1b;abstract:⛓支持所有JS运行环境&#xff0c;Node.js服务端&#xff1b; 1.1…

[网鼎杯 2018]Fakebook1

join一个用户后&#xff0c;点进去发现是这样的 查看这个页面的源代码&#xff0c;发现一个base64编码后的字串 decode之后就是我们join新用户时填入的blog网址 那我们是不是可以通过填入存储flag的地址&#xff0c;从而回显出来呢&#xff1f;当然&#xff0c;先按照常规sqli…

九、Kotlin 注解

1. 什么是注解 注解是对程序的附件信息说明。 注解可以作用在类、函数、函数参数、属性等上面。 注解的信息可用于源码级、编译期、运行时。 2. 注解类的定义 使用元注解 Retention 声明注解类的作用时期。 使用元注解 Target 声明注解类的作用对象。 定义注解类时可以声…

从二叉树角度来理解快速排序

“快速排序就是个二叉树的前序遍历” ——————labuladong 快速排序的逻辑 快速排序是先将一个元素排好序&#xff0c;然后再将剩下的元素排好序。 若要对 nums[lo..hi] 进行排序&#xff0c;我们先找一个分界点 p&#xff0c;通过交换元素使得 nums[lo..p-1] 都小于等于 …

Centos7 双机单网卡安装 OpenStack

虚拟机配置 1&#xff1a;准备虚拟机2台&#xff0c;配置如下 openstack master----192.168.20.205 2cpu&#xff0c;8G内存&#xff0c;200G硬盘&#xff0c;网络桥接方式--静态IP----单网卡 node1计算节点---192.168.20.215 2cpu&#xff0c;8G内存&#xff0c;200G硬盘&a…

专业120+总分400+海南大学838信号与系统考研高分经验海大电子信息与通信

今年专业838信号与系统120&#xff0c;总分400&#xff0c;顺利上岸海南大学&#xff0c;这一年的复习起起伏伏&#xff0c;但是最后还是坚持下来的&#xff0c;吃过的苦都是值得&#xff0c;总结一下自己的复习经历&#xff0c;希望对大家复习有帮助。首先我想先强调一下专业课…

scrapy的概念作用和工作流程

1. scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使用了Twisted[twɪstɪd]异步网络框架&#xff0c;可以加快我们的下载速度。 Scrapy文档地址&#xff1a;http://scrapy-chs.readthedocs.io/zh_…

05 双向链表

目录 1.双向链表 2.实现 3.OJ题 4.链表和顺序表对比 1. 双向链表 前面写了单向链表&#xff0c;复习一下 无头单向非循环链表&#xff1a;结构简单&#xff0c;一般不会单独用来存数据。实际中更多作为其他数据结构的子结构&#xff0c;如哈希桶、图的邻接等。另外这种结构在…

dubbo和eureka的区别

dubbo可以作为客户端&#xff0c;也可以作为服务端&#xff0c;因此他内置了很多序列化框架可供选择&#xff0c;通过配置可以进行选择。默认是hession&#xff0c;还有gson&#xff0c;fastJson&#xff0c;jdk自带的序列化。 eureka只能作为服务端&#xff0c;他序列要与客户…

解析MySQL生产环境CPU使用率过高的排查与解决方案

引言 在生产环境中&#xff0c;MySQL作为一个关键的数据库组件&#xff0c;其性能对整个系统的稳定性至关重要。然而&#xff0c;有时候我们可能会遇到MySQL CPU使用率过高的问题&#xff0c;这可能导致系统性能下降&#xff0c;应用页面访问减慢&#xff0c;甚至影响到用户体…