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

数据结构与算法 复习记录(一)

文章目录

  • **C++ 各类传参的书写格式总结**
    • **1. 基本数据类型**
    • **2. 数组**
    • **3. STL 容器(vector, list, map, etc.)**
    • **4. 类对象**
    • **C++ 二维数组的传参方式对比**
    • **5. 指针与引用的综合**
    • **🌟 总结**

C++ 各类传参的书写格式总结


1. 基本数据类型

方式书写格式说明
按值传递void func(int a);传递副本,不影响原数据
按指针传递void func(int* a);传递地址,可修改原数据,需检查 nullptr
按引用传递void func(int& a);传递别名,直接修改原数据
按常量引用传递void func(const int& a);传递别名,保护数据不被修改

2. 数组

方式书写格式说明
按指针传递void func(int* arr, int size);传递指针,需额外传递大小
按引用传递void func(int (&arr)[5]);传递数组的引用,大小必须固定
std::array 传递void func(const std::array<int, 5>& arr);避免退化,更安全

3. STL 容器(vector, list, map, etc.)

方式书写格式说明
按指针传递void func(std::vector<int>* v);允许 nullptr,需使用 -> 访问
按引用传递void func(std::vector<int>& v);避免拷贝,提高效率
按常量引用传递void func(const std::vector<int>& v);保护数据,避免不必要的拷贝

4. 类对象

方式书写格式说明
按值传递void func(Person p);产生拷贝,适用于小对象
按指针传递void func(Person* p);允许 nullptr,需检查
按引用传递void func(Person& p);避免拷贝,直接操作对象
按常量引用传递void func(const Person& p);避免拷贝,保护数据不被修改

C++ 二维数组的传参方式对比

都是 两行三列 二维数组

C/C++ 中的二维数组(如 int arr[2][3])本质上是 按行优先顺序连续存储的一维数组

int arr[2][3] = {{1,2,3}, {4,5,6}};//地址低 → 高:[1,2,3,4,5,6]
// 只有知道 列数, 才能推出在第几行  所以 列数必须传
`void func(int (*arr)[3], int rows);`表示 arr 是一个 指向包含3个int的数组的指针。
方式书写格式适用场景说明
按指针传递void func(int (*arr)[3], int rows);固定列数不能自动推导列数
按引用传递void func(int (&arr)[2][3]);固定大小数组不会退化,自动推导大小
使用 std::vectorvoid func(const vector<vector<int>>& arr);动态二维数组灵活,可变大小
使用 std::arrayvoid func(const array<array<int, 3>, 2>& arr);固定大小数组兼顾 安全性和性能

5. 指针与引用的综合

方式书写格式说明
指针的引用void func(int*& p);修改指针本身
数组指针void func(int (*arr)[3], int rows);适用于二维数组
二维数组引用void func(int (&arr)[2][3]);适用于固定大小的二维数组

🌟 总结

  1. 小数据类型(int, double)按值传递
  2. 大对象(std::string, std::vector, class)按引用传递
  3. 不修改数据使用 const &
  4. 数组传指针(int* arr)或引用(int (&arr)[size]
  5. 类对象传引用(Person& p)或 const 引用

这样写更高效、易读、安全!🚀

相关文章:

  • 【Python进阶】元组:不可变序列的十大核心应用
  • JavaScript基础-01(笔记)
  • 复旦大学、百度联合开源数字人项目hallo2,支持高分辨率(可达4K)、长视频生成(最多1小时)
  • PyTorch学习-小土堆教程
  • 2025年泰迪杯数据挑战赛B题问题分析
  • 文章记单词 | 第35篇(六级)
  • 等离子体浸没离子注入(PIII)
  • XR技术赋能艺术展演|我的宇宙推动东方美学体验化
  • 50常用控件_QPushButton
  • Linux的目录结构(介绍,具体目录结构)
  • 机器狗运行是否需要服务器分析
  • 【Windows Cmake工程配置Boost库】
  • PyTorch - Tensor 学习笔记
  • python爬虫JavaScript基础
  • Python 第三节 流程控制
  • UDP猜数字游戏与TCP文件传输案例解析
  • AI日报 - 2025年04月17日
  • Python Cookbook-6.5 继承的替代方案——自动托管
  • Vue 3 路由配置使用与讲解
  • 脚本-QQ批量发送消息(图片和文字)
  • 做php门户网站那个系统好/软考培训机构哪家好一点
  • 做专业课视频课的网站/百度推广托管公司
  • 免费视频网站推荐/网站排名软件包年
  • 群晖nas安装wordpress安装/seo排名教程
  • 技术支持 沧州辉煌网络-网站建设/搜索竞价托管
  • 夜里十大禁用直播ios/seo网络推广招聘