个人简介
👀个人主页: 前端杂货铺
🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🍉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 与 数组的区别:
- 数组是更加底层的数据结构;长度固定,功能较少,安全性没有保证;但性能更好,运行更高效;
- 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);
// 直接初始化并附默认值 100
vector<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,了解了它与数组的区别,并熟悉了 初始化、访问、遍历、添加元素、获取长度 等操作。
好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!
参考资料:
- 百度百科 · C++
- 2023最新版C++【作者:尚硅谷】