当前位置: 首页 > news >正文

C++核心知识点总结

学习一门新的程序设计语言得到最好方法就是练习编写程序!

C++基础

变量和基本类型

基本内置类型

定义解释
 算术类型

整型:包括字符和布尔类型,bool、char、wchar_t、char16_t、char32_t、short、int、long、long long、

浮点型:float、double、long double

类型转换

类型所能表示的值的范围决定了转换的过程;

字面值常量

整型:20

浮点型:3.14159

字符:'a'

字符串:"Hello World"

转义序列:/n

变量

变量定义基本形式:首先是类型说明符,随后紧跟由一个或多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束。

int sum, value;

初始化:当对象在创建时获得了一个特定的值,就说这个对象被初始化了。初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。

double price = 109.99;

列表初始化:用花括号来初始化变量的形式被称为列表初始化。

int units_sold = 0;
int units_sold = {0};
int units_sold(0);
int units_sold{0};

标识符:由字母、数字和下划线组成,其中必须以字母或下划线开头;标识符长度没有限制,但对大小写字母敏感。

int somename, someName, SomeName, SOMENAME;//定义了4个不同的int 变量

作用域:是程序的一部分,在其中名字有其特定的含义,C++语言中大多数作用域都以花括号分隔;同一个名字在不同的作用域可能指向不同的实体;名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束。主要分成全局作用域块作用域

复合类型

复合类型:指基于其他类型定义的类型,主要有引用指针

引用(reference):为对象起了另外一个名字,引用类型引用另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是申明的变量名。

引用必须初始化;

引用即别名;

int ival = 1024;
int &refVal = ival;
int &refVal2; //报错:引用必须被初始化

允许在一条语句中定义多个引用,其中每个引用标识符都必须以符号&开头。

int i = 1024, i2 = 2048; //i和i2都是int
int &r = i, r2 = i2;//r是一个引用,与i绑定在一起,r2是int
int i3 = 1024, &ri= i3; //i3是int, ri是一个引用,与i3绑定在一起
int &r3 = i3, &r4 = i2; //r3和r4都是引用

 指针(pointer):是“指向(point to)”另外一种类型的复合类型,与引用类似,指针也实现了对其他对象的间接访问;指针与引用相比有很多的不同点,其一,指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内他可以先后指向几个不同的对象;其二,指针无须在定义时赋初值。

和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。

定义指针类型的方法将声明符写成*d的形式,其中d是变量名,如果在一条语句中定义了几个指针的变量,每个变量前面都必须有符号*。

int *ip1, *ip2;//ip1和ip2都是指向int型对象得到指针
double dp, *dp2; //dp2是指向double型对象的指针,dp是double型对象

 获取对象的地址:指针存放某个对象的地址,要想获取该地址,需要使用取地址符(操作符&)。

double dval;
double *pd = &dval; //初始值是double型对象的地址
double *pd2 = pd; //初始值是指向double对象的指针

空指针(null pointer): 不指向任何对象,在试图使用一个指针之前代码可以首先检查它是否为空。

建议初始化所有指针。

int *p1 = nullptr;
int *p2 = 0;
int *p3 = NULL; //需要首先#include cstdlib

void*指针:是一种特殊的指针类型,可用于存放任意对象的地址,一个void*指针存放着一个地址,这一点和其他指针类似;不同的是,对该地址中到底是个申明类型的对象并不了解。

指向指针的指针:指针是内存中的对象,像其他对象一样也有自己的地址,因此允许把指针的地址再存放到另一个指针当中。

int ival = 1024;
int *pi = &ival;//pi指向一个int型的数
int **ppi = π//ppi指向一个int型的指针

指向指针的引用:引用本身不是一个对象,因此不能定义指向引用的指针;但指针是对象,所以存在对指针的引用。

int i = 42;
int *p;//p是一个int型指针
int *&r = p;//r是一个对指针p的引用


【=========================================待更新=============2023.7.30========================】

const限定符

处理类型

自定义数据结构

字符串、向量和数组

  1. 命名空间的using声明
  2. 标准库类型string
  3. 标准库类型vector
  4. 迭代器介绍
  5. 数组
  6. 多维数组

表达式

  1. 基础
  2. 算术运算符
  3. 逻辑与关系运算符
  4. 赋值运算符
  5. 递增和递减运算符
  6. 成员访问运算符
  7. 条件运算符
  8. 位运算符
  9. sizeof运算符
  10. 逗号运算符
  11. 类型转换
  12. 运算符优先级表

语句

  1. 简单语句
  2. 语句作用域
  3. 条件语句
  4. 迭代语句
  5. 跳转语句
  6. try语句块和异常处理

函数

  1. 函数基础
  2. 参数传递
  3. 返回类型和return语句
  4. 函数重载
  5. 特殊用途特性
  6. 函数匹配
  7. 函数指针

  1. 定义冲向数据类型
  2. 访问控制与封装
  3. 类的其他特性
  4. 类的作用域
  5. 构造函数再探
  6. 类的静态成员

C++标准库

IO库

  1. IO类
  2. 文件输入输出
  3. string流

顺序容器

  1. 顺序容器概览
  2. 顺序容器操作
  3. vector对象是如何增加的
  4. 额外的string操作
  5. 容器适配器

泛型算法

  1. 初识泛型算法
  2. 定制操作
  3. 再探迭代器
  4. 泛型算法结构
  5. 特定容器算法

关联容器

  1. 关联容器概述
  2. 关联容器操作
  3. 无序容器

动态内存

  1. 动态内存与智能指针
  2. 动态数组
  3. 使用标准库:文本查询程序

C++类设计者工具

拷贝控制

  1. 拷贝、赋值与销毁
  2. 拷贝控制和资源管理
  3. 交换操作
  4. 拷贝控制示例
  5. 动态内存管理类
  6. 对象移动

重载运算与类型转换

  1. 输入和输出运算符
  2. 算术和关系运算符
  3. 赋值运算符
  4. 下标运算符
  5. 递增和递减运算符
  6. 成员访问运算符
  7. 函数调用运算符
  8. 重载、类型转换与运算符

面向对象程序设计

  1. OOP概述
  2. 定义基类和派生类
  3. 虚函数
  4. 抽象基类
  5. 访问控制与继承
  6. 继承中的类作用域
  7. 容器与继承
  8. 文本查询程序再探

模板与泛型编程

  1. 定义模板
  2. 模板实参推断
  3. 重载与模板
  4. 可变参数模板
  5. 模板特例化

C++高级主题

标准库特殊设施

  1. tuple类型
  2. bitset类型
  3. 正则表达式
  4. 随机数
  5. IO库再探

用于大型程序的工具

  1. 异常处理
  2. 命名空间
  3. 多重继承与虚继承

特殊工具与技术

  1. 控制内存分配
  2. 运行时类型识别
  3. 枚举类型
  4. 类成员指针
  5. 嵌套类
  6. union
  7. 局部类
  8. 固有的不可移植的特性

C++11的新特性

特性解释
long long 类型
列表初始化
nullptr常量

参考

C++ Primer(第5版).

相关文章:

C++核心知识点总结

学习一门新的程序设计语言得到最好方法就是练习编写程序! C基础 变量和基本类型 基本内置类型 定义解释 算术类型 整型:包括字符和布尔类型,bool、char、wchar_t、char16_t、char32_t、short、int、long、long long、 浮点型:…...

echart折线图,调节折线点和y轴的间距(亲测可用)

options代码: options {tooltip: {trigger: axis, //坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。},xAxis: {type: category,//类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。…...

Power BI-云端报表定时刷新--ODBC、MySQL、Oracle等其他本地数据源的刷新(二)

ODBC数据源 一些小众的数据源无法直接连接,需要通过微软系统自带的应用“ODBC数据源”连接。 1.首次使用应安装对应数据库的ODBC驱动程序,Mysql的ODBC驱动需要手动安装 2.在web服务中进行数据源的配置 Mysql数据源 1.Powerbi与Gateway第一次连SQL…...

redis 淘汰策略和持久化

文章目录 一、淘汰策略1.1 背景1.2 淘汰策略 二、持久化2.1 AOF日志2.1.1 AOF配置2.1.2 AOF策略2.1.3 AOF缺点2.1.4 AOF Rewrite2.1.5 AOF Rewrite配置2.1.6 AOF Rewrite缺点2.1.7 fork进程时的写时复制2.1.8 大key对持久化的影响 2.2 RDB快照2.2.1 RDB配置2.2.2 RDB缺点 2.3 混…...

Redis学习路线(6)—— Redis的分布式锁

一、分布式锁的模型 (一)悲观锁: 认为线程安全问题一定会发生,因此在操作数据之前先获取锁,确保线程串行执行。例如Synchronized、Lock都属于悲观锁。 优点: 简单粗暴缺点: 性能略低 &#x…...

一、创建自己的docker python容器环境;支持新增python包并更新容器;离线打包、加载image

1、创建自己的docker python容器环境 参考:https://blog.csdn.net/weixin_42357472/article/details/118991485 首先写Dockfile,注意不要有txt等后缀 Dockfile # 使用 Python 3.9 镜像作为基础 FROM python:3.9# 设置工作目录 WORKDIR /app# 复制当前…...

【Git】git企业开发命令整理,以及注意点

1.git企业开发过程 业务的分支大概有以下几个: master:代码随时可能上线 develop:代码最新 feature/xxx:实际业务开发分支 release/xxx:预发布分支 fix:修复bug分支 过程大概是这样的: 首…...

使用Django自带的后台管理系统进行数据库管理的实例

Django自带的后台管理系统主要用来对数据库进行操作和管理。它是Django框架的一个强大功能,可以让你快速创建一个管理界面,用于管理你的应用程序的数据模型。 使用Django后台管理系统,你可以轻松地进行以下操作: 数据库管理&…...

leetcode解题思路分析(一百四十五)1254 - 1266 题

统计封闭岛屿的数目 二维矩阵 grid 由 0 (土地)和 1 (水)组成。岛是由最大的4个方向连通的 0 组成的群,封闭岛是一个 完全 由1包围(左、上、右、下)的岛。请返回 封闭岛屿 的数目。 BFS或者DFS…...

使用 GORM 连接数据库并实现增删改查操作

步骤 1:安装 GORM 首先,我们需要安装 GORM 包。在终端中运行以下命令: shell go get -u gorm.io/gorm 步骤 2:导入所需的包 在 Go 代码的开头导入以下包: import ("gorm.io/driver/mysql" // 如果你使用…...

kafka集群搭建(Linux环境)

zookeeper搭建,可以搭建集群,也可以单机(本地学习,没必要搭建zookeeper集群,单机完全够用了,主要学习的是kafka) 1. 首先官网下载zookeeper:Apache ZooKeeper 2. 下载好之后上传到…...

树莓派本地快速搭建web服务器,并发布公网访问

文章目录 树莓派本地快速搭建web服务器,并发布公网访问 树莓派本地快速搭建web服务器,并发布公网访问 随着科技的发展,电子工业也在不断进步,我们身边的电子设备也在朝着小型化和多功能化演进,以往体积庞大的电脑也在…...

集合中的数据结构

栈 先进后出入口跟出口在同一侧 队列 先进先出入口跟出口在不同的一层 数组 查询快、增删慢查询快是因为数组的地址是连续的,我们通过数组的首地址就可以找到数组,之后通过数组的下标就可以访问数组的每一个元素。增删慢是因为数组的长度是固定的&…...

CentOS 8 错误: Error setting up base repository

配置ip、掩码、网关、DNS VMware网关可通过如下查看 打开网络连接 配置镜像的地址 vault.centos.org/8.5.2111/BaseOS/x86_64/os/...

java外观模式

在Java中,外观模式(Facade Design Pattern)用于为复杂的子系统提供一个简单的接口,以方便客户端的使用。外观模式是一种结构型设计模式,它隐藏了系统的复杂性,将多个类的复杂操作封装在一个外观类中&#x…...

3秒快速打开 jupyter notebook

利用 bat 脚本,实现一键打开 minconda 特点: 1、可指定 python 环境 2、可指定 jupyter 目录 一、配置环境 minconda 可以搭建不同的 python 环境,所以我们需要找到 minconda 安装目录,把对应目录添加到电脑环境 PATH 中&#…...

数据安全

数据的备份与恢复 1. 数据备份技术 任何数据在长期使用过程中,都存在一定的安全隐患。由于认为操作失误或系统故障,例如认为错误、程序出错、计算机失效、灾难和偷窃,经常造成数据丢失,给个人和企业造成灾难性的影响。在这种情况…...

华为nat64配置

1.前期环境准备 环境拓扑 拓扑分为两个区域,左边为trust区域,使用IPv4地址互访,右边为untrust区域,使用IPv6地址互访 2.接口地址配置 pc1地址配置 pc2地址配置 FW接口配置 (1)首先进入防火墙配置界面 注:防火墙初始账号密码为user:admin,pwd:Admin@123,进入之后…...

从分片传输到并行传输之大文件传输加速技术

随着大文件的传输需求越来越多,传输过程中也会遇到很多困难,比如传输速度慢、文件安全性低等。为了克服这些困难,探讨各种大文件传输加速技术。其中,分片传输和并行传输是两种比较常见的技术,下面将对它们进行详细说明…...

mybatisPlus入门篇

文章目录 初窥门径1.1 初识MybatisPlus1.2 MybatisPlus的特性1.3 MybatisPlus的架构模型 入门案例2.1 准备相关开发环境2.2 搭建springboot工程2.3 创建数据库2.4 引入相关依赖2.5 创建实体类2.6 集成MybatisPlus2.7 单元测试2.8 springboot日志优化 初窥门径 1.1 初识Mybatis…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

ESP32读取DHT11温湿度数据

芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...