C++之提高篇

news2025/2/7 21:48:46

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_unique
    demo1 = NULL;
    un_demo1->show();
    un_demo1->set_name("new");
    un_demo1->show();
    //delete demo1;
    return 0;
}

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

在这里插入图片描述

lambda表达式

在这里插入图片描述

线程库

在这里插入图片描述

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

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

相关文章

Charles抓取安卓应用https包演示

一、准备软件 夜神安卓模拟器 (yeshen.com) Charles (charlesproxy.com) 二、配置抓包 2.1 Charles安装PC根证书 记住这里的ip端口 三、安卓模拟器配置 3.1 配置安卓客户端网络代理 填写上文的ip端口&#xff0c;保存 3.2 安装根证书 3.2.1 导出根证书 linux主机执行 op…

LeetCode 算法:随机链表的复制 c++

原题链接&#x1f517;&#xff1a;随机链表的复制 复杂度&#xff1a;中等⭐️⭐️ 题目 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由…

[数据集][图像分类]瑜伽动作分类数据集1238张5类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;1238 分类类别数&#xff1a;5 类别名称:["downdog","godde…

基于YOLOv5的PCB板缺陷检测系统的设计与实现

简介 随着电子设备的广泛应用&#xff0c;PCB&#xff08;印刷电路板&#xff09;作为其核心部件&#xff0c;其质量和可靠性至关重要。然而&#xff0c;PCB生产过程中常常会出现各种缺陷&#xff0c;如鼠咬伤、开路、短路、杂散、伪铜等。这些缺陷可能导致设备故障&#xff0…

ASP.NET MVC-简单例子

环境&#xff1a; win10&#xff0c;.NET Framework 4.6.1 参考&#xff1a; ASP.NET MVC 简介 | 菜鸟教程 https://www.runoob.com/aspnet/mvc-intro.html 准备 查看 net framework 版本: cmd-> C:\Windows\Microsoft.NET\Framework\v4.0.30319>MSBuild /version Mic…

C语言笔记第16篇:编译和链接

1、翻译环境和运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行机器指令&#xff08;二进制指令&#xff09; 第2种是执行环境&#xff0c;它用于实际执行代码 2、翻译环境 那翻译环境是怎…

动态ARP

定义 动态ARP表项由ARP协议通过ARP报文自动生成和维护&#xff0c;可以被老化&#xff0c;可以被新的ARP报文更新&#xff0c;可以被静态ARP表项覆盖。 动态ARP适用于拓扑结构复杂、通信实时性要求高的网络。 ARP地址解析过程 动态ARP通过广播ARP请求和单播ARP应答这两个过…

软件测试笔记

一、介绍 软件测试是为了尽可能多地发现软件系统中的错误而不是证明软件的正确性。 1、软件缺陷是什么&#xff1f; 软件在使用过程中存在的任何问题都叫软件的缺陷&#xff0c;简称bug。 缺陷的判定标准 软件未实现需求说明书中明确要求的功能——少功能 软件出现了需求说…

经典游戏案例:愤怒的小鸟

学习目标&#xff1a;愤怒的小鸟核心玩法 游戏画面 项目结构目录 部分核心代码 using System.Collections; using System.Collections.Generic; using birds; using utils; using UnityEngine;public class GameManager : MonoBehaviour {public static GameManager sInstanc…

【免费】中国电子学会2024年03月份青少年软件编程Python等级考试试卷一级真题(含答案)

2024-03 Python一级真题 分数&#xff1a;100 题数&#xff1a;37 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 下列哪个命令&#xff0c;可以将2024转换成2024 呢&#xff1f;&#xff08; A&#xff09;(2分) A.str(2024) B.int(2024) C.fl…

Flutter Android 调试桥 (adb)

客户端&#xff1a;用于发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。 守护程序adbd&#xff1a;用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。 服务器&#xff1a;用于管理客户端与守护程序之间的通信。服务器在开…

fastapi+vue3+primeflex前后端分离开发项目环境搭建

创建后端项目 创建文件夹&#xff1a; mkdir backend创建python虚拟环境&#xff1a; python -m venv venv使用Pycharm打开文件夹&#xff0c;然后配置python解释器为venv虚拟环境。 安装fastapi&#xff1a; pip install "fastapi[all]"编写第一个程序&#xf…

牛顿迭代法(求解整数的近似平方根)

情景再现 面试官&#xff1a;给你一个整数怎样最快求解他的近似平方根&#xff1f; 小白&#xff1a;可以用while循环呀&#xff01; 面试官&#xff1a;有没有更好的方法&#xff1f; 小白&#xff1a;可以从这个数的左右两边开始迭代。 面试官&#xff1a;除了这个呢&#xf…

学会python——统计文件中文字出现次数(python实例九)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3、统计文本文件中单词频率 3.1 代码构思 3.2 代码示例 3.3 运行结果 4、总结 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计…

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

pytest测试框架pytest-sugar插件生成进度条

Pytest提供了丰富的插件来扩展其功能&#xff0c;介绍下插件pytest-sugar&#xff0c;可以帮助我们在控制台中显示彩色的测试结果和进度条&#xff0c;提供失败的堆栈回溯信息。 为了使用 pytest-sugar&#xff0c;需要满足以下条件&#xff1a; Python 3.8 或更高版本pytest…

Nominatim免费的地址解析,逆地址解析,OpenStreetMap开源地图数据【全网最全】

视频学习地址 国内的一些地址解析供应商的API都开始付费了&#xff0c;就想找个免费的地址解析和逆地址解析的应用&#xff0c;最终选择了Nominatim OpenStreetMap 文章目录 一、选型1-1、数据源1-2、地理编码引擎2-1、初尝Nominatim2-1-1、地址解析2-1-2、逆地址解析 2-2、OS…

【MMSegmentation 环境配置】

MMSegmentation 环境配置 1. 创建python 环境2. 安装pytorch3. 安装MMCV4. 安装 MMSegmentation.5. 测试是否安装成功 1. 创建python 环境 conda create --name openmmlab python3.8 -y conda activate openmmlab2. 安装pytorch On GPU platforms: conda install pytorch tor…

平凉特色小吃,味蕾的诱惑之旅

平凉&#xff0c;这座历史悠久的城市&#xff0c;不仅拥有深厚的文化底蕴&#xff0c;更有着让人垂涎欲滴的特色小吃。每一种小吃都承载着当地人的情感与记忆&#xff0c;成为了平凉独特的饮食符号。平凉特色小吃酿皮更是别具风味。爽滑透明的凉皮&#xff0c;配上香辣可口的调…