CPP错误案例
数组倒序将一组数组倒序排序,如{1,2,3,4,5}=>{5,4,3,2,1}
错误写法:
123456789101112131415161718192021222324252627282930#include <iostream>using namespace std;int main() { // 数组倒序 int arr_02[] = { 1,2,3,4,5 }; length = sizeof(arr_02) / sizeof(arr_02[0]); for (int i = 0; i < length; i++) { int reverse_index = length - 1 - i; if (arr_02[i] == arr_02[reverse_index]) { continue; } else { int tmp = arr_02[i]; arr_02[i] = arr_02[reverse_index] ...
CPP基础案例
通讯录管理系统系统需求通讯录是一个可以记录亲人、好友信息的工具
本案例主要利用C++来实现基础的通讯录管理系统
系统中需要实现的主要功能如下:
添加联系人:向通讯录中添加新人,信息包括姓名、性别、年龄、联系电话、家庭住址,最多记录1000人
显示联系人:显示通讯录中所有联系人信息
删除联系人:按照姓名删除指定联系人信息
查找联系人:按照姓名查看指定联系人信息
修改联系人:按照姓名重新修改指定联系人
清空联系人:清空通讯录中所有信息
退出通讯录:退出当前使用的通讯录
将对应功能通过分文件编写函数,使得项目结构清晰,可读性、复用性更强
联系人结构体将联系人结构体放入到MyConstructs.h文件中,这样后续涉及到联系人结构体的内容直接引入即可:
123456789101112#pragma once#include <string>using namespace std;struct Person { string name; string gender; int age = -1; // 初始值 string phone; string address;&# ...
CPP文件操作
C++文件操作关键字:ifstream、ofstream、ios::
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放
通过文件可以将数据持久化
C++中对文件操作需要包含头文件<fstream>
文件类型分为两种:
文本文件 - 文件以文本的ASCII码形式存储在计算机中
二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们
操作文件的三大类:
ofstream:写操作
ifstream:读操作
fstream:读写操作
文本文件写文件写文件步骤如下:
包含头文件#include <fstream>
创建流对象ofstream ofs;
打开文件ofs.open("文件路径",打开方式);
写数据ofs << "写入的数据"
关闭文件ofs.close()
文件打开方式:
打开方式
解释
ios::in
为读文件而打开文件
ios::out
为写文件而打开文件
ios::ate
初始位置:文件尾
ios::app
追加方式写文件
...
CPP_STL
STL基本概念
STL(Standard Template Library,标准模板库)
STL从广义上分为:容器(container)、算法(algorithm)、迭代器(iterator)
容器和算法之间通过迭代器进行无缝连接
STL几乎所有的代码都采用了模板类或者模板函数
STL六大组件STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器
容器:各种数据结构,如Vector、List、Deque、Set、Map等,用来存放数据
算法:各种常用的算法,如Sort、Find、Copy、For_Each等
迭代器:扮演了容器与算法之间的胶合剂
仿函数:行为类似函数,可作为算法的某种策略
适配器:一种用来修饰容器或者仿函数或迭代器接口的东西
空间配置器:负责空间的配置与管理
STL中容器、算法、迭代器容器STL容器就是将运用最广泛的一些数据结构实现出来
常用的数据结构:数组、链表、数、栈、队列、集合、映射表等
这些容器分为序列式容器和关联式容器两种:
序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置
关联式容器:二叉树结构,各元素 ...
CPP模板
模板的概念模板就像一个”代码模具”,可以根据不同的类型生成相应的代码,大大提高复用性。
模板的优势在于:
代码重用:一份代码适用于多种类型
类型安全:编译期检查,避免运行时错误
性能优化:编译期生成代码,无运行时开销
灵活性:支持特化、偏特化等高级特性
需求:假设要实现求最大值的函数,需要支持int、double、string等类型:
1234// 传统做法:每种类型写一个函数int maxInt(int a, int b) { return a > b ? a : b; }double maxDouble(double a, double b) { return a > b ? a : b; }string maxString(string a, string b) { return a > b ? a : b; }
问题:通过以上内容,可以看出代码重复、维护困难、容易出错。虽然这几个函数只是参数类型不同,但函数内的实现逻辑都是相同的,可是还是需要单独实现
函数模板
C++另一种编程思想称为泛型编程,主要 ...
CPP面向对象
面向对象的三大特性:封装、继承、多态
C++认为万物皆为对象,对象上有其属性和行为
封装封装的意义封装是C++面向对象三大特性之一
封装的意义:
将属性和行为作为一个整体,表现生活中的事务
将属性和行为加以权限控制
在设计类的时候,属性和行为写在一起,表现事物
语法:class 类名 { 访问权限: 属性 / 行为 };
示例1:设计一个圆类,求圆的周长
123456789101112131415161718192021222324252627282930313233#include <iostream>#include <string>using namespace std;class Circle { private: const double Pi = 3.14; double radius; // 半径 public: // 构造函数 Circle(double radius) { this->radius ...
CPP核心内容
内存分区模型C++程序在执行时,将内存大方向划分为4个区域
代码区:存放函数体的二进制代码,由操作系统进行管理
全局区:存放全局变量和静态变量以及常量
栈区:由编译器自动分配释放,存放函数的参数值,局部变量等
堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收
区域
存储内容
生命周期
访问速度
栈区
局部变量、函数参数、返回地址
函数结束时自动释放
最快
堆区
new/malloc动态分配的对象
手动管理或程序结束回收
较慢
全局区
全局/静态变量、常量、虚函数表
程序启动到结束
中
代码区
机器指令、只读常量(字符串字面量)
程序运行期间
只读
代码区(Text Segment)
用途:存储编译后的二进制机器指令(函数体代码)
特性:
只读属性(防止程序意外修改指令)
...
CPP基础内容
相关内容来自B站黑马程序员:C++教程从0到1入门编程
C++起步知识注释和Java一样,C++的注释分为单行注释和多行注释
单行注释://
多行注释:/* */
例如:
1234567// 1. 这是单行注释/* 1. 这是多行注释 2. 这是多行注释 3. 这是多行注释*/
入口函数在C++中,入口函数为main函数,每个程序有且仅有一个入口函数,对应Java中的public static void main
123456789#include <iostream>using namespace std;int main() { cout << "Hello World" << endl; return 0;}
变量作用:给一段指定的内存空间起名,方便操作这段内存
语法:数据类型 变量 = 值;
1234567891011#include <iostream>using namespace std;int main() { int a = 10; cout <& ...
vscode_CPP环境搭建
系统环境搭建
从官网上下载mingw64:
找到github入口后下载压缩包:
解压至任意路径,但路径中不能含有中文,比如C://mingw64
将mingw64/bin添加到环境变量中
控制台输入gcc -v查看是否能正确显示相关信息:
Vscode编译环境搭建
安装相关插件:
创建一个.cpp文件或打开一个.cpp文件,按下快捷键CTRL + SHIFT + P并搜索C/C++: 编辑配置(UI):
进行相关配置:
点击编译,并选择配置:
如果控制台能正确输出对应代码结果表示环境搭建成功,最后再添加调试配置即可:
随后会自动创建一个调试配置文件,用户可以自行选择相关配置,或直接复制以下代码:
1234567891011121314151617181920212223242526{ "version": "0.2.0", "configurations": [ { "name": &quo ...
Python
Python基础整理时间:2025-04-06 | 适用版本:Python 3.10+ | 学习方式:B站尚硅谷
Demo可以通过百度网盘下载:PythonDemo.7z
语法差异速查表
特性
Java
Python
代码块
{} 包裹
缩进(4空格/Tab)
语句结束符
;
换行即结束
变量声明
类型强制声明
动态类型
主函数入口
public static void main
if __name__ == "__main__":
块注释
//
#
多行注释
/* */
“””“””
常量声明
final修饰符
变量大写(没有专门的常量类型,可以引入第三方库实现)
打印函数——Print基础用法和Java中的System.out.println()一样,主要是用于在控制台中输出结果的,基础用法如下所示:
123print("Hello World") # 输出字符串print(2025) # 输出数字print([ ...