跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

C++ 基础学习笔记(一)数据类型与 IO

综述由AI生成是 C++ 基础学习笔记的第一部分,主要涵盖了基本数据类型的表示范围与后缀、标准输出流 cout 的各种格式化方法(如宽度、精度、对齐)、字符 char 的本质与转义、string 类的常用操作方法(容量、访问、修改、查找等)、逻辑运算符优先级、枚举类型的定义与使用、随机数的生成机制以及数组的基础声明。内容包含大量代码示例和表格说明,适合初学者快速查阅 C++ 核心语法细节。

kaikai发布于 2026/3/30更新于 2026/5/2224 浏览
C++ 基础学习笔记(一)数据类型与 IO

C++ 基础学习笔记

一、基础(一)

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 的表示范围比 long long 大得多

后缀含义
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 使用 setw, setprecision, setfill 需要 #include <iomanip> 使用二进制输出,需要 #include <bitset> 作用范围:有些设置只影响下一个输出例如 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++ 语言中它是一种基本数据类型
  • 枚举的作用是提高代码的可读性、可维护性和键入性,因为枚举可以将一些数字或字符串符号化 —— 将数字标号定义为具体的符号
#include<iostream>
using namespace std;
enum Season{
    SPRING,// 0
    SUMMER =3,// 3
    AUTUMN,// 4
    WINTER // 5
};
int main(){
    Season s1 = AUTUMN;
    cout << s1;// 输出 0
    switch(s1){
        case SPRING: cout << "春天" << endl;
        break;
        default: cout << "不是春天" << endl;
    }
    return 0;
}

7、随机数

#include<iostream>
#include<cstdlib>// 添加 rand(), srand()
#include<ctime>// 添加 time()
using namespace std;
int main(){
    srand(time(0));// 使用当前时间作为随机种子
    int r =rand()%100;
    return 0;
}

Tip 1、需要设置随机种子,才能使得每次运行生成的随机数不同 2、设置玩随机种子后,会生成一个随机数序列,每次调用 rand() 会从这个序列中选出一个随机数 3、time(0) 返回以秒为单位的时间戳,如果将 srand(time(0)) 放在 for 循环里面,而每次 for 循环执行的时间间隔少于一秒,则每次循环都会生成相同的随机数序列

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main(){
    for(int i =1; i <5; i++){
        // 每个 for 循环中将会生成相同的随机数序列
        srand(time(0));// 调用这个序列的 rand() 将会使得每个循环获得到的随机数相同
        cout <<rand()<<" "<<rand()<< endl;
    }
    return 0;
}

8、数组

  • 一维数组
#include<iostream>
using namespace std;
int main(){
    // 1、数组的声明
    int arr1[

目录

  1. C++ 基础学习笔记
  2. 一、基础(一)
  3. 1、类型表示范围
  4. 2、cout
  5. 3、char
  6. 4、string
  7. 5、逻辑运算符
  8. 6、枚举
  9. 7、随机数
  10. 8、数组
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 拒绝等距透视手绘地狱!AIGC联动2D图像巨头:2.5D次世代废墟建筑极速量产
  • Neo4j 5.26 版本下载安装配置步骤
  • 哈希表原理详解:从哈希函数到冲突解决的 C++ 实现
  • AirSim 无人机仿真平台零基础部署实战指南
  • 从三年前端到韩国 CS 硕士:一段留学经历的得与失复盘
  • HTTP 应用层协议详解与简易服务器实现
  • Windows 7 系统 Python 3.8+ 兼容安装指南
  • 学习 Python 的八大理由:数据驱动的职业发展与技术优势
  • GPT 模型的发展历程与核心架构解析
  • 基于 Rokid AR 眼镜的喝水提醒应用开发实践
  • Java LLM 开发框架全面解析:从 Spring AI 到 Agents-Flex
  • Zynq FPGA 平台下雷龙 SD NAND 存储测试实践
  • Claude Code 插件 Ralph Wiggum 使用指南:实现 AI 自动修复 Bug
  • MySQL 数据类型详解与选型最佳实践
  • 大模型应用开发极简入门:从 Transformer 架构到 LangChain 实战
  • C++ list 容器源码实现及迭代器逻辑详解
  • 数据结构基础:直接插入、希尔与选择排序详解
  • Linux 文件权限修改:chmod、fchmod 与 fchmodat 函数解析
  • WordPress 基础配置与 Java 后端开发实战笔记
  • Flutter 与 Dart 核心面试题解析及实战指南

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online