C++——数组、多维数组、简单排序、模板类vector

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒Three.js🍖数据结构与算法体系教程

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

C++基础篇

内容参考链接
C++入门(一)C++——简介、Hello World、变量常量、数据类型

文章目录

  • C++基础篇
    • 前言
    • 一、数组
    • 二、多维数组
    • 三、简单排个序
    • 四、模板类 vector
    • 总结

前言

大家好,这里是前端杂货铺。

上一篇文章,我们初步认识了 C++,并学习了常量变量和数据类型等知识。

接下来,继续我们 C++ 的学习!


一、数组

数组就是一组相同类型的数据对象集合。

下面,我们进行对一维数组的 初始化,访问和遍历操作

#include<iostream>
using namespace std;int main()
{// 长度为 10 的 int 类型的数组int a1[10];const int n = 4;// 长度为 4 的 double 类型的数组double a2[n];int i = 4;// double a3[i]; // 错误写法,元素个数不能为变量// 初始化int a3[4] = { 1, 2, 3, 4 };float a4[] = { 5, 6, 7 };short a5[10] = { 3, 6, 9 };// short a6[2] = { 3, 6, 9 }; // 报错,初始值太多// int a6[4] = a3; // 错误,不能用另一个数组对数组进行复制// 访问数组int a[] = { 1,2,3,4,5,6,7 };cout << "a[2] = " << a[2] << endl;a[2] = 30;cout << "修改后 a[2] = " << a[2] << endl;// 获取数组长度cout << "a数组所占空间大小为:" << sizeof(a) << endl;cout << "a数组中每个元素所占空间大小为:" << sizeof(int) << endl;int aSize = sizeof(a) / sizeof(int);cout << "数组a的长度为:" << aSize << endl;// 遍历for (int i = 0; i < aSize; i++) {cout << "a[" << i << "] = " << a[i] << endl;}// 范围 for 循环for (int num : a) {cout << num << endl;}cin.get();
}

在这里插入图片描述


二、多维数组

多维数组就是数组的数组。其访问等操作和一维数组几乎一致。详见下面的代码:

#include<iostream>
using namespace std;int main()
{// 初始化 二维数组 三行四列int ia[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},};// 等价于ia,但可读性不高int ia2[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};// 只对第一个元素赋值,其余赋零值int ia3[3][4] = { 12 };// 第一个维度可省略(编译器可自动推断),第二个维度不可省略 int ia4[][4] = {{ 1,2,3,4 },{ 5,6,7,8 },{ 9,10,11,12 },};// 访问cout << "ia[1][2] = " << ia[1][2] << endl;// 遍历// 计算二维数组中的行数和列数cout << "ia总大小为:" << sizeof(ia) << endl;cout << "ia每一行的大小为:" << sizeof(ia[0]) << endl;cout << "ia每一个元素的大小为:" << sizeof(ia[0][0]) << endl;// 行数int rowCount = sizeof(ia) / sizeof(ia[0]);// 列数int colCount = sizeof(ia[0]) / sizeof(ia[0][0]);for (int i = 0; i < rowCount; i++){for (int j = 0; j < colCount; j++) {cout << ia[i][j] << "\t";}cout << endl;}// & 表示引用,后续会学习for (auto& row : ia) {for (auto num : row) {cout << num << "\t";}cout << endl;}cin.get();
}

在这里插入图片描述


三、简单排个序

我们使用双重 for 循环,对数组进行排序,下面的代码中我们使用了 选择排序法冒泡排序法 实现了对数组中无顺序的数进行排序。

#include<iostream>using namespace std;int main()
{int arr[] = { 5,7,8,1,2,4,6,9,8 };int size = sizeof(arr) / sizeof(arr[0]);// 选择排序for (int i = 0; i < size; i++) {for (int j = i + 1; j < size; j++) {if (arr[j] < arr[i]) {int temp = arr[j];arr[j] = arr[i];arr[i] = temp;}}}// 冒泡排序for (int i = 0; i < size; i++) {for (int j = 0; j < size - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}for (int num : arr) {cout << num << " ";}cout << endl;cin.get();
}

在这里插入图片描述


四、模板类 vector

vector 是对数组功能进行扩展的一个标准库类型。它容纳着一堆数据对象,其实就是一组类型相同的数据对象的集合。

vector 与 数组的区别:

  1. 数组是更加底层的数据结构;长度固定,功能较少,安全性没有保证;但性能更好,运行更高效;
  2. vector 是模板类,是数组的上层抽象;长度不定,功能强大;但运行效率较低;

C++ 11 还新增了 array 模板类,它跟数组更加类似,长度是固定的,但更加方便、更加安全。所以在实际应用中,对于固定长度的数组使用 array,不固定长度的数组使用 vector。

下面的代码,我们进行了 模板类的初始化、访问元素、修改元素、遍历元素、添加元素 等操作,其实现也比较简单,详见如下代码:

#include<iostream>
#include<vector>
using namespace std;int main()
{// 默认初始化vector<int> v1;// 列表初始化(拷贝初始化)vector<char> v2 = { 'a', 'b' };// 可以不加等号vector<char> v3 { 'a', 'b' };// 直接初始化vector<short> v4(5);// 直接初始化并附默认值 100vector<long> v5(5, 100);// 访问元素cout << "访问v5[3]元素:" << v5[3] << endl;// 修改元素v5[3] = 25;cout << "修改v5[3]的值为25:" << v5[3] << endl;// cout << v5[6] << endl; // 错误,越界访问// 遍历所有元素for (int i = 0; i < v5.size(); i++) {cout << v5[i] << " ";}cout << endl;// 添加元素v5.push_back(50);// 添加元素后遍历for (int num : v5) {cout << num << " ";}cout << endl;// 向空容器中添加倒序的元素for (int i = 10; i > 0; i--) {v1.push_back(i);}for (int num : v1) {cout << num << " ";}cin.get();
}

在这里插入图片描述


总结

本篇文章我们首先认识到了 C++ 的数组和多维数组,并熟悉了如何对其 初始化、访问、遍历

之后,我们通过 简单排序法,使用了双重 for 循环完成了对数组的排序。

最后,我们认识了 模板类 vector,了解了它与数组的区别,并熟悉了 初始化、访问、遍历、添加元素、获取长度 等操作。

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. 百度百科 · C++
  2. 2023最新版C++【作者:尚硅谷】

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/638288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构实验7:查找的应用

目录 一、实验目的 二、实验原理 1. 顺序查找 2. 折半查找 3. 二叉树查找 三、实验内容 实验一 任务 代码 截图 实验2 任务 代码 截图 一、实验目的 1.掌握查找的基本概念&#xff1b; 2.掌握并实现以下查找算法&#xff1a;顺序查找、折半查找、二叉树查找。 …

Python正则表达式Regular Expression初探

目录 Regular 匹配规则 单字符匹配 数量匹配 边界匹配 分组匹配 贪婪与懒惰 原版说明 特殊字符 转义序列 模块方法 函数说明 匹配模式 常用匹配规则 1. 匹配出所有整数 2. 匹配11位且13开头的整数 Regular Python的re模块提供了完整的正则表达式功能。正则表达式…

Win10升级Win11后卡顿了?

目录 关闭动画效果 任务栏居中改为居左 调整外观和性能 其他 当你看到最后&#xff0c;还知道哪些升级WIN11后必做的优化呢&#xff1f;欢迎在评论区分享出来&#xff01;❤️ win11上市目前也有一段时间了&#xff0c;想必很多大家都已经进行更新了。新的系统确实更加简洁…

安规电容的知识

1、常见安规电容有哪些&#xff1f; 一般我们所说的安规电容也就有两种&#xff0c;一种就是X安规电容&#xff08;X1/X2/X3安规电容&#xff09;&#xff0c;还有一种是Y电容&#xff08;最常见的是Y1和Y2安规电容&#xff09;。 2、x电容的位置 火线零线间的是X电容。x电容用…

Git将某个文件合并到指定分支

企业开发中&#xff0c;经常会单独拉分支去做自己的需求开发&#xff0c;但是某些时候一些公共的配置我们需要从主线pull&#xff0c;这时候整个分支merge显然不合适 1.切换至待合并文件的分支 git checkout <branch>2.将目标分支的单个文件合并到当前分支 git checkou…

力扣刷MySQL-第三弹(详细讲解)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…

JVM中的垃圾收集算法

标记-清除算法 首先标记出所有需要回收的对象&#xff0c;在标记完成后&#xff0c;统一回收掉所有被标记的对象&#xff0c;也可以反过来&#xff0c;标记存活的对象&#xff0c;统一回收所有未被标记的对象。标记过程就是对象是否属于垃圾的判定过程 缺点 第一个是执行效率…

C# 获取QQ会话聊天信息

目录 利用UIAutomation获取QQ会话聊天信息 效果 代码 目前遇到一个问题 其他解决办法 利用UIAutomation获取QQ会话聊天信息 效果 代码 AutomationElement window AutomationElement.FromHandle(get.WindowHwnd); AutomationElement QQMsgList window.FindFirst(Tr…

4.postman批量运行及json、cvs文件运行

一、批量运行collection 1.各个接口设置信息已保存&#xff0c;在collection中点击run collection 2.编辑并运行集合 集合运行时&#xff0c;单独上传图片时报错。需修改postman设置 二、csv文件运行 可新建记事本&#xff0c;输入测试数据&#xff0c;后另存为新的文本文件&…

Pytest 结合 Allure 生成测试报告

测试报告在项目中是至关重要的角色&#xff0c;一个好的测试报告&#xff1a; 可以体现测试人员的工作量&#xff1b; 开发人员可以从测试报告中了解缺陷的情况&#xff1b; 测试经理可以从测试报告中看到测试人员的执行情况及测试用例的覆盖率&#xff1b; 项目负责人可以通过…

echarts-wordcloud词云

echarts-wordcloud是基于echarts的一个插件&#xff0c;所以我们要首先安装echarts包&#xff0c;然后再安装echarts-wordcloud的包&#xff0c;这里我的练习项目安装的版本&#xff1b;当然&#xff0c;你可以随意安装你需要的版本&#xff1b; “echarts”: “^5.3.3”, “ec…

面试2024.1.20

简单介绍下你做的项目。 这个神领物流项目是一个前后端分离的项目&#xff0c;前段他有3个客户端&#xff08;用户端为微信小程序、司机端和快递员端为app&#xff09;一个管理端&#xff08;pc&#xff09;&#xff0c;后端用的技术栈用的是SpringAlibabaCloud、数据库用的是M…

【精选】中间件 tomcat漏洞复现

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

JRTP实时音视频传输(2)-使用TCP通信的案例

环境搭建等参考&#xff1a;JRTP实时音视频传输(1)-必做的环境搭建与demo测试 1.创建自己的demo 先将example1拷贝为myclienttcp.cpp和myservertcp.cpp cp example1.cpp myclienttcp.cpp cp example1.cpp myservertcp.cpp 改写jrtplib/JRTPLIB/examples/CMakeLists.txt&…

79、avx2 向量指令集优化卷积运算

上一节 介绍了 avx2 向量指令集中的 load/store 操作,本节介绍如何使用 avx2 的向量指令集来实现乘累加运算。 因为我们实战中用到的 resnet50 神经网络中,卷积运算在整个模型中的比例占据是相当高,而卷积运算的核心计算就是乘累加计算。因此,只要将最核心的乘累加计算效率…

怎么从视频中提取动图?一个方法快速提取gif

视频以连续的方式播放一系列图像帧&#xff0c;通过每秒播放的帧数&#xff08;帧率&#xff09;来创做&#xff0c;由于GIF动图则以循环播放一系列静态图像帧的方式展现动画效果。由于视频的优势在于流畅的动画、丰富的细节和长时间播放&#xff0c;因此常用于电影、电视节目、…

如何在 Ubuntu / Raspbian 上安装 MariaDB

Raspberry Pi OS&#xff08;原为Raspbian&#xff09;是为树莓派基于Debian开发的操作系统。 从2015年起&#xff0c;树莓派基金会正式将其作为树莓派的官方操作系统。 Raspbian是由Mike Thompson和Peter Green创建的一个独立项目。第一个版本于2012年6月发布&#xff0c;至…

LP-AM243x EtherNet/IP 连接施耐德 M241 EIP主站测试

硬件环境&#xff1a;LP-AM243x 开发板 施耐德 Modicon M241 软件环境&#xff1a; INDUSTRIAL-COMMUNICATIONS-SDK-AM243X MCU-PLUS-SDK-AM243X — MCU SDK for AM243x 调试过程&#xff1a; 首先&#xff0c;让AM243x能够运行 Null Boot&#xff0c; Starting NULL Boo…

Kotlin 尾递归函数

函数式编程中&#xff0c;重要的概念 尾递归。 当一个函数&#xff0c;在函数最后调用 自身&#xff0c;称为 尾递归&#xff0c;是一种特殊的递归函数。 在JVM中&#xff0c;每次方法调用时&#xff0c;都会产生新的栈帧&#xff08;stack frame&#xff09;&#xff0c;消耗栈…

TCP缓存(C++)

系统为每个 socket 创建了发送缓冲区和接收缓冲区&#xff0c;应用程序调用 send()/write()函数发送数据的 时候&#xff0c;内核把数据从应用进程拷贝 socket 的发送缓冲区中&#xff1b;应用程序调用 recv()/read()函数接收数据的时候&#xff0c;内核把数据从 socket 的接收…