【学习笔记】C++(1)

作者:贺一航【Niki】日期:2026/1/28

C++学习笔记

  • 一、基础
    • 1、类型表示范围
    • 2、cout
    • 3、char
    • 4、string
    • 5、逻辑运算符
    • 6、枚举
    • 7、随机数
    • 8、数组
    • 9、其他

一、基础

1、类型表示范围

类型字节数位宽十进制范围(大约)具体值范围
char18位-128 ~ 127-2⁷ ~ 2⁷-1
short216位-32,768 ~ 32,767-2¹⁵ ~ 2¹⁵-1
int432位-21亿 ~ 21亿-2,147,483,648 ~ 2,147,483,647
long4/832/64位同int或long long系统相关
long long864位-922亿亿 ~ 922亿亿-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
类型字节数十进制范围(大约)具体值范围
unsigned char10 ~ 2550 ~ 2⁸-1
unsigned short20 ~ 65,5350 ~ 2¹⁶-1
unsigned int40 ~ 42.9亿0 ~ 2³²-1
unsigned long4/8同uint或ulong long系统相关
unsigned long long80 ~ 1844亿亿0 ~ 2⁶⁴-1
类型字节数十进制范围(大约)最小值(大约)有效数字(十进制)精度说明
float4±3.4×10³⁸±1.2×10⁻³⁸6~7位单精度浮点
double8±1.8×10³⁰⁸±2.2×10⁻³⁰⁸15~16位双精度浮点
long double8/16范围更大精度更高18~19位或更多扩展精度浮点

TIP: float 的表示范围比 longlong 大得多

后缀含义
U表示无符号数
Llong long
ULunsigned long
ULLunsigned long long
Ffloat
Ddouble

2、cout

标志功能示例代码输出示例
fixed固定小数格式cout << fixed << 123.456;123.456000
scientific科学计数法cout << scientific << 123.456;1.234560e+02
defaultfloat恢复默认格式cout << defaultfloat << 123.456;123.456
showpoint总是显示小数点cout << showpoint << 100;100.000
noshowpoint取消显示小数点cout << noshowpoint << 100.0;100
showpos显示正号cout << showpos << 42;+42
noshowpos取消显示正号cout << noshowpos << +42;42
boolalpha布尔显示true/falsecout << boolalpha << true;true
noboolalpha布尔显示1/0cout << noboolalpha << true;1
方法/标志功能示例代码输出示例
width(n)设置输出宽度cout.width(10); cout << 123;123
setw(n)设置宽度(常用)cout << setw(10) << 456;456
left左对齐cout << left << setw(10) << "ABC";ABC
right右对齐(默认)cout << right << setw(10) << "DEF";DEF
internal内部对齐(符号左)cout << internal << setw(10) << -123;- 123
fill(ch)设置填充字符cout.fill('*'); cout.width(10) << 123;*******123
setfill(ch)设置填充字符cout << setfill('-') << setw(10) << 456;-------456
方法功能示例代码输出示例
precision(n)设置精度cout.precision(3); cout << 3.14159;3.14
setprecision(n)设置精度(常用)cout << setprecision(5) << 3.14159;3.1416
fixed + setprecision固定小数位数cout << fixed << setprecision(2) << 3.14159;3.14
scientific + setprecision科学计数法精度cout << scientific << setprecision(3) << 3.14159;3.142e+00
标志/方法功能示例代码输出示例
dec十进制(默认)cout << dec << 255;255
hex十六进制cout << hex << 255;ff
oct八进制cout << oct << 255;377
showbase显示进制前缀cout << showbase << hex << 255;0xff
noshowbase取消进制前缀cout << noshowbase << hex << 255;ff
uppercase大写字母cout << uppercase << hex << 255;FF
nouppercase小写字母cout << nouppercase << hex << 255;ff
bitset<n>(num)二进制输出cout << bitset<8>(255);11111111
方法/标志功能示例代码说明
flush刷新缓冲区cout << "处理中..." << flush;立即输出
endl换行并刷新cout << "Line 1" << endl;换行+刷新
ends输出空字符cout << "Hello" << ends;输出 Hello\0
unitbuf每次输出都刷新cout << unitbuf;无缓冲输出
nounitbuf恢复缓冲cout << nounitbuf;正常缓冲
用途示例代码输出示例
表格对齐cout << left << setw(10) << "姓名" << right << setw(8) << "成绩";姓名 成绩
货币格式cout << fixed << setprecision(2) << "$" << 19.99;$19.99
科学数据cout << scientific << setprecision(3) << 0.00123456;1.235e-03
填充编号cout << setfill('0') << right << setw(5) << 42;00042
地址格式cout << hex << showbase << uppercase << 0xdeadbeef;0xDEADBEEF

TIP

  1. 使用 setw, setprecision, setfill 需要 #include <iomanip>
  2. 使用二进制输出,需要 #include <bitset>
  3. 作用范围:有些设置只影响下一个输出例如 width() ,有些设置会保持有效直到被更改

3、char

  • char 的本质上是 数字 ,通过ASCII表跟对应的数值联系起来
  • char 和整形运算,会先将字符转换为对应的数值,运算结果是一个数字
类型字节数范围映射表
[signed] char1B-128~127ASCII
unsigned char1B0~255ASCII
常见转义字符含义ASCII值
\n换行010
\t水平制表009
\\反斜杠字符092
\’单引号字符039
\"双引号字符034

4、string

容量操作方法功能示例
length() / size()字符串长度s.length(); / s.size();
empty()是否为空if(s.empty()) { ... }
capacity()容量大小s.capacity();
reserve(n)预分配空间s.reserve(100);
resize(n)调整大小s.resize(10);
resize(n, c)调整大小并填充s.resize(10, 'x');
shrink_to_fit()释放多余空间s.shrink_to_fit();
max_size()最大可能长度s.max_size();
元素访问方法功能示例
operator[]访问字符char c = s[0];
at(n)访问字符(检查边界)char c = s.at(0);
front()第一个字符char c = s.front();
back()最后一个字符char c = s.back();
修改方法功能示例
push_back(c)末尾添加字符s.push_back('!');
append(str)追加字符串s.append(" world");
operator+=追加s += " world";
insert(pos, str)插入字符串s.insert(0, "Hello ");
insert(pos, n, c)插入n个字符s.insert(5, 3, '*');
删除方法功能示例
pop_back()删除末尾字符s.pop_back();
erase(pos)删除pos处字符s.erase(5);
erase(pos, len)删除从pos开始的len个字符s.erase(5, 3);
erase(iterator)删除迭代器指向的字符s.erase(s.begin());
erase(first, last)删除迭代器范围s.erase(s.begin(), s.begin()+3);
clear()清空字符串s.clear();
替换方法功能示例
replace(pos, len, str)替换子串s.replace(0, 5, "Hi");
replace(first, last, str)替换迭代器范围s.replace(s.begin(), s.begin()+5, "Hi");
字符串操作功能示例
substr(pos)从pos开始的子串string sub = s.substr(6);
substr(pos, len)从pos开始len长度的子串string sub = s.substr(0, 5);
find(str, pos)查找子串位置int pos = s.find("world");
rfind(str, pos)从后往前查找int pos = s.rfind("world");
find_first_of(str, pos)查找任意字符首次出现int pos = s.find_first_of("aeiou");
find_last_of(str, pos)查找任意字符最后出现int pos = s.find_last_of("aeiou");
find_first_not_of(str, pos)查找不在str中的字符int pos = s.find_first_not_of(" ");
find_last_not_of(str, pos)从后往前查找不在str中的字符int pos = s.find_last_not_of(" ");
compare(str)比较字符串if(s.compare("hello") == 0) { ... }
swap(str)交换字符串s1.swap(s2);
copy(buf, len, pos)复制到字符数组char buf[10]; s.copy(buf, 5, 0);
迭代器功能示例
begin() / end()正向迭代器for(auto it=s.begin(); it!=s.end(); ++it)
cbegin() / cend()const正向迭代器for(auto it=s.cbegin(); it!=s.cend(); ++it)
rbegin() / rend()反向迭代器for(auto it=s.rbegin(); it!=s.rend(); ++it)
crbegin() / crend()const反向迭代器for(auto it=s.crbegin(); it!=s.crend(); ++it)
数字转换功能示例
to_string(num)数字转字符串string s = to_string(123);
stoi(str)字符串转intint n = stoi("123");
stol(str)字符串转longlong n = stol("123");
stoll(str)字符串转long longlong long n = stoll("123");
stof(str)字符串转floatfloat f = stof("123.45");
stod(str)字符串转doubledouble d = stod("123.45");
stold(str)字符串转long doublelong double ld = stold("123.45");

5、逻辑运算符

优先级:非 > 与 > 异或 > 或

6、枚举

  • 枚举本质上是一个 被命名的整型常数集合 ,在 C/C++ 语言中它是一种基本数据类型
  • 枚举的作用是提高代码的可读性、可维护性和键入性,因为枚举可以将一些数字或字符串符号化 —— 将数字标号定义为具体的符号

``


【学习笔记】C++(1)》 是转载文章,点击查看原文


相关推荐


【AI大模型开发】-基于FAISS的语义搜索系统(实战)
Java后端的Ai之路2026/1/19

向量数据库实战:基于FAISS的语义搜索系统 一、项目概述 1.1 什么是向量数据库? 向量数据库是一种专门用于存储、索引和检索高维向量数据的数据库系统。在AI领域,向量通常是指通过预训练模型(如Transformer)将文本、图像等非结构化数据转换而成的数值表示(Embedding)。 1.2 项目背景 本项目展示了如何使用阿里云百炼Embedding API生成文本向量,并结合FAISS(Facebook AI Similarity Search)构建一个简单但功能完整的语义搜索系统。 1.


Claude Skills:Agent 能力扩展的新范式
清沫2026/1/11

为什么需要 Skills? 2025 年被称为智能体元年。各类 Agent、子 Agent、MCP 工具及自动化流水线迅速出现,让 AI 可以接手越来越多真实工作。比如 Claude Code 推出的 Agent 模块,或通过可视化平台、LangChain 开发的各种工具。 随着智能体功能增强,需要更具可组合性、可扩展性和可移植性的方法,为它们配备特定领域专业知识。这促使智能体 Skills 诞生:智能体可动态发现并加载包含指令、脚本和资源的文件夹,从而更好完成特定任务。 什么是 Skills?


2025年度总结之-如何构建 2025 专属的 GitHub AI 项目情报库
CoderJia_2026/1/3

背景 为什么做 为了更好地追踪 2025 年涌现的 AI 开源项目,我经常浏览 Github 热榜 并整理分享。但手动查阅难免会有遗漏,为此,我计划开发一套自动化工具来采集 Github 热榜数据,旨在辅助个人技术积累的同时,也为博客内容提供持续的素材来源。下文将详细介绍我的技术实现思路,若有设计不足之处,恳请各位读者指正。 如何制作 在该流程的初始阶段,核心任务是构建针对 GitHub 热榜(Trending)页面的数据采集机制。需要分别按照日(Daily)、周(Weekly)及月(M


从字符游戏到 CPU 指令集:一道算法题背后的深度思维跃迁
ToddyBear2025/12/24

"Simplicity is the ultimate sophistication." — Leonardo da Vinci 前言:很多时候,一道看似简单的算法题,不仅是代码能力的试金石,更是计算机底层思维的显微镜。本文记录了一次关于“查找 K-th 字符”问题的深度探讨。我们不满足于“做出来”,而是试图通过逆向工程,从直觉出发,推导出数学原理,最终触达硬件指令集的设计哲学。 🟢 第一部分:面试极速备忘录 (Executive Summary) 为了方便日后快速回顾(如面试前 5


5 分钟快速入门 Gitlab CI/CD
yuguo.im2025/12/16

🚀 快速掌握 GitLab CI/CD:自动化你的开发流程 GitLab CI/CD 是一个功能强大的工具,它内置于 GitLab 中,用于自动化你的软件构建、测试和部署流程。如果你希望提升开发效率、减少人为错误并实现持续集成/持续部署(CI/CD),那么掌握它至关重要。 本文将通过最核心的概念、最简单的配置,带你快速入门 GitLab CI/CD。 核心概念:理解 GitLab CI 的基石 在编写你的第一个配置文件之前,理解以下几个关键概念是掌握 GitLab CI 的前提: 1. 配置


这5个AI文本可视化工具太强了!一键把文本转信息图、流程图等多种可视化形式!PPT秒变高级!(建议收藏)
程序员X小鹿2025/12/8

大家好,我是X小鹿。 前几天被读者问到了「文本可视化」工具,趁着周末,整理了下之前体验过的几款还不错的 AI 工具。 这些 AI 工具都可以一键将枯燥的文本,转化为精美信息图、数据图、卡片等形式。 不管是在项目汇报中插入,还是用于 PPT 配图、文章配图、生成科普图文、读书笔记卡片、自媒体图文创作等场景,都是可以的。 下面分享 5 个目前国内外用得较多「文本可视化」工具。 有需要的可以保存下,早晚用得上~ 一、Seede AI 第一个,Seede AI,一款适合普通人上手的 AI 设计工具,国内


Rokid AI眼镜:连接现实与数字的桥梁,探索下一代智能应用开发
倔强的石头_2025/11/28

@[toc] 前言:当AI遇上AR,未来触手可及 增强现实(AR)技术长久以来都被视为下一代计算平台,它承诺将数字信息无缝叠加到物理世界之上,从而彻底改变我们与信息交互的方式。然而,要将这一愿景变为现实,离不开一个强大、易用且充满活力的开发生态。Rokid AI眼镜及其配套的SDK,正是这样一个旨在赋能开发者的平台,它为我们打开了通往“空间互联网”时代的大门。 本文将聚焦于AI Glasses实践应用,以一个具体的工业场景——AI工业装配助手为例,深入探讨如何利用Rokid平台提供的能力,从概念


Spring IOC&DI(上)
阿武不想上早八2026/2/6

Spring IOC&DI(上) 1. Spring IOC&DI Spring 是包含了众多工具方法的 IOC 容器 1.1 容器 概念:容器时用来容纳物品的装置。 例子:List/Map -> 数据存储容器;Tomcat -> Web 容器 1.2 IOC 概念:全称:Inversion of Control(控制反转),是 Spring 的核心思想,把对象交给 Spring 管理,就是 IOC 思想。 总的来说,Spring 就是一个”控制反转“的容器。 2. I


Kafka 生产者与消费者配置详解
倚肆2026/2/15

Kafka 生产者与消费者配置详解 一、DefaultKafkaProducerFactory 生产者配置详解 配置项示例值作用说明调优建议ProducerConfig.BOOTSTRAP_SERVERS_CONFIG"localhost:9092"Kafka 集群地址列表,生产者通过此地址发现集群。配置多个地址(用逗号分隔)以提高可用性。ProducerConfig.KEY_SERIALIZER_CLASS_CONFIGStringSerializer.class消息键的序列化器。键用于分区


326. Java Stream API - 实现自定义的 toList() 与 toSet() 收集器
yaoxin5211232026/2/23

文章目录 326. Java Stream API - 实现自定义的 `toList()` 与 `toSet()` 收集器📦 实现一个自定义 `toList()` 收集器🚀 使用我们的 `ToList` 收集器🔄 将其改造成 `toSet()` 收集器✅ 修改 1:使用 `HashSet` 作为容器✅ 修改 2:声明该收集器是无序的 🧪 `ToSet` 收集器完整实现示例🎯 总结一下关键点🧠 小贴士 326. Java Stream API - 实现自定义的 toL

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客