
1月6日,InfiniTensor 大模型与人工智能系统训练营编程基础课第二课开讲,课程主题为《C++实践2》。
本课程通过实践形式,帮助学生掌握C++编程基础,同时引入命令行操作、版本管理工具Git以及代码风格规范等实用技能,提升综合编程能力。
函数优化与模块化设计
1. 函数拆分与命名规范
- 问题:input函数功能冗余(输入与计算混合)。
- 解决方案:拆分为input(输入)和calculate(计算)函数。
- 命名规范:函数名应准确反映功能(如calculate替代原input中的计算部分)。
2. 参数传递与常量修饰
- 引用传递:使用double&传递参数以避免拷贝。
- 常量修饰:对无需修改的参数添加const(如const double& x)。
- 示例:
void input(double& x, double& y, char& op); // 输入函数
double calculate(const double& x, const double& y, const char& op); // 计算函数
命令行工具与版本控制(Git)
1. Git基础操作
- 初始化仓库:
git init - 状态查看:
git status - 添加文件:
git add <file> - 提交更改:
git commit -m "message" - 日志查看:
git log
2. 版本管理实践
- 忽略生成文件:如编译结果main不应纳入版本控制。
- 分阶段提交:通过git add选择部分更改提交,保持提交记录清晰。
代码风格与格式化工具
1. 代码风格规范(如 Google 的 llvm)
- 缩进
- 花括号位置
- 行长度限制
- 命名规则
2. 自动化格式化工具
- Clang-Format:通过配置文件(.clang-format)统一代码风格。
- IDE集成:VS Code中通过快捷键Shift+Alt+F格式化代码。
C++进阶:数组与指针
1. 数组基础
- 定义与初始化:
double numbers[2] = {1.0, 2.0}; - 访问元素:通过索引(如
numbers[0])。
2. 指针与数组关系
- 指针本质:数组名即首元素地址(如
numbers等价于&numbers[0])。 - 指针传递:函数参数中使用指针替代数组(如
void process(double* arr, int size))。
3. 动态大小处理
- 循环遍历:使用for循环处理变长数组。
- 示例:求和函数
double sum(const double* numbers, int size) {
double result = 0.0;
for (int i = 0; i < size; ++i) {
result += numbers[i];
}
return result;
}
结构体与数据封装
1. 结构体定义
- 目的:将相关数据绑定为一个整体(如size与data数组)。

2. 结构体应用
- 简化函数参数:传递单个结构体而非多个独立参数。
- 内存管理:动态分配数组时需手动释放内存。
变长输入处理与字符串流
1. 行输入处理
- getline函数:读取整行输入(如getline(cin, line))。
- 字符串流(stringstream):解析行中的多个数值。
- 示例:
string line;
getline(cin, line);
istringstream iss(line);
double num;
while (iss >> num) {
// 处理每个数值
}
2. 终止条件设计
行结束标志:以换行符为输入终止条件,支持变长操作数。
总结与展望
本节课通过实践形式,帮助学生掌握了C+ +编程基础、命令行操作、Git版本管理以及代码风格规范等实用技能。通过模块化编程思维和良好代码习惯的培养,可以具备独立开发小型项目的能力。后续课程将继续深入讲解C++高级特性,并引入更多实际项目案例,帮助大家更好地理解和应用所学知识。

📚 训练营报名持续进行中
扫码报名与加入群聊,或点击 「阅读原文」 直达官网报名
