C++(8)--数组array-长度固定

数组及常用算法

  • 1.数组基本概念
  • 2.一维数组
    • 2.1数组的定义
    • 2.2数组初始化
    • 2.3一维数组动态赋初值
    • 2.4一维数组应用实例
    • 2.5一维数组的排序算法
    • 2.6 一维数组元素的删除和插入
    • array
  • 3.二维数组
    • 3.1数组定义
    • 3.2二维数组的动态赋值

《老九学堂C++课程》《C++ primer》学习笔记。《老九学堂C++课程》详情请到B站搜索《老九零基础学编程C++入门》
-------------简单的事情重复做,重复的事情用心做,用心的事情坚持做(老九君)---------------

1.数组基本概念

什么是数组:数组是一个变量,由数据类型相同的一组元素组成,在内存占一串连续的内存空间。

数组是一个类型:比如int 型的数组,类型就是int []
C++中数组元素必须拥有相同的数据类型加粗样式

数组基本要素
1.表示符:数组的名称,用于区分不同的数组(用来表示数组的变量名)
2.数组元素:向数组中存放的数据
3.元素下标:对数组元素进行编号,表明元素在数组中的位置。从0开始,可以通过下标来访问数组
4.元素类型:数组中元素的数据类型
数组长度固定, 避免数组越界

使用数组的优点: 方便管理需要相同操作的数据

demo1:可以构成数组的一组元素?
在C/C++中可以构成一个数组,在java中不行

198, 98, ‘c’, 230 // 字符在C++中是整形存的
1, 0, true, false, 38, -1 // c++中布尔类型实际是整形

2.一维数组

可以存成数组的情况:学生单门学科的成绩,某类商品的单价,某人N个月的工资

2.1数组的定义

定义语法:

datatype arrayName[size];

demo:

int nums[25];
char array_of_name[30];
double curr_salary[35];

const int N = 5;
int nums[N];
nums[0] = 9527;

const int N = 5;
int nums[N];
nums[0] = 9527;

注意:C++中数组的大小可以定义变量,C中不可以可以定义成变量

2.2数组初始化

用大括号初始化元素内容

int years[6] = {2012,2013,2014,2015,2016,2017}; //可以少给元素,但是不能多给
int months[12] = {1, 3, 5, 7}; // 未初始化的元素默认值未0
int days[] = {1,15}; // 不设定数组大小,编译器自动计算数组大小
int array[] = {} // ❌,未知元素个数是不可以的

c++ 11中新的改动:
a.初始化是可以不用等于号;
b.大括号可以为空,默认为所有元素执行置0操作

int days[] {};
float m[100] {};

2.3一维数组动态赋初值

动态从键盘录入信息,赋值给数组

int main(){int N = 5;double scores[N];//for(int i = 0; i < N; i++){for(int i = 0; i < sizeof(scores) / sizeof(double); i++){cout << "请输入第" << i + 1 << "课程的成绩:" ;cin >> scores[i];}for(int i = 0; i < N; i++){cout << scores[i] << endl;}return 0;
}

注意C++中数组没有.len()的属性,没法直接获得数组的长度。

2.4一维数组应用实例

demo1:一维数组求和,求平均

int main(){
int main(){int nums[7] = {8, 4, 2, 1, 23, 344, 12};int nums_len = sizeof(nums) / sizeof(nums[0]);int sum = 0;double average = 0;for(int i = 0; i < nums_len; i++){cout << nums[i] << " ";sum += nums[i];}average = sum / nums_len;cout << "和为:" << sum << ", 均值为:" << average << endl;return 0;
}

demo2: 找出数组的最大值,最小值

	// 求数组的最大值最小值int min_val = nums[0], max_val = nums[0]; //假设第一个元素为最小值/最大值,其后的元素依次和最大最小比,然后更新最大值/最小值int min_index = 0, max_index = 0;for(int i = 1; i < nums_len; i ++){if(nums[i] < min_val){min_val = nums[i];min_index = i;}if(nums[i] > max_val){max_val = nums[i];max_index = i;}}cout << "最小值为:" << min_val << ", 对应的下标为:" << min_index << endl;cout << "最大值为:" << max_val << ", 对应的下标为:" << max_index << endl;

demo3:定义一个整形数组,找出奇数/偶数元素的个数

	// 定义一个整形数组,找出奇数/偶数元素的个数int odd_count = 0, even_count = 0;for(int i = 0; i < nums_len; i++){if(nums[i] % 2 == 0){even_count += 1;}else{odd_count += 1;}}cout << "偶数有:" << even_count << "个, 奇数有:" << odd_count << "个" <<endl;

demo4:查找数组中是否存在某个元素,如果存在返回元素在数组中的下标,不存在返回-1

	//查找数组中是否存在某个元素,如果存在返回元素在数组中的下标,不存在返回-1int searchNum;int searchIndex = -1;  //初值值是一个不可能达到的值,如果最后他还是这个不可能达到的值,那么就没找到cout << "请输出要查找的数字" << endl;cin >> searchNum;for(int i = 0; i < nums_len; i++){if (nums[i] == searchNum){searchIndex = i;break;}}if(searchIndex == -1){cout << "没有查到要找的数字" << endl;}else{cout << "要查找的数字在数组中的下标为:" << searchIndex << endl;}

2.5一维数组的排序算法

1.冒泡排序
每次相邻的元素比较,将较大或者较小的元素放着后面,依次比较,较小/较大的数字就会冒到最后面 。

int main(){// 循环输入5个整形数字,进行降序排列后输出结果int n = 5;int nums[5] = {};for(int i = 0; i < n; i++){cout << "请输入数字" << endl;cin >> nums[i];}// 选择排序法// 每次找剩下元素的最大值/最小(和老师讲的有点不一样,但实质是一样的)for(int i = 0; i < n; i++){for(int j = i+1; j < n; j++){if(nums[i] < nums[j]){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}}}for(int i = 0; i < n; i++){cout << nums[i] << endl;}

2.选择排序

int main(){// 循环输入5个整形数字,进行降序排列后输出结果int n = 5;int nums[5] = {};for(int i = 0; i < n; i++){cout << "请输入数字" << endl;cin >> nums[i];}// 选择排序法// 每次找剩下元素的最大值/最小(和老师讲的有点不一样,但实质是一样的)for(int i = 0; i < n; i++){for(int j = i+1; j < n; j++){if(nums[i] < nums[j]){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}}}for(int i = 0; i < n; i++){cout << nums[i] << endl;}return 0;
}

2.6 一维数组元素的删除和插入

数组的大小一旦确定了,就无法改变。

int main(){// 有序数组的插入和删除//数组的删除和插入(数组一旦定义,大小不能改变,所以本例子说的是数组的长度远大于有效存储元素的个数)double power[99];int powerCount = 0;  // 当前数组中元素的个数power[powerCount++] = 45760;power[powerCount++] = 45770;power[powerCount++] = 45772;power[powerCount++] = 45773;double tmp;for(int i = 0; i < powerCount; i++){for(int j = 1; j < powerCount - i; j ++){if(power[j] < power[j-1]){tmp = power[j];power[j] = power[j-1];power[j-1] = tmp;}}}cout << "排序后的数组为:" << endl;for(int i = 0; i < powerCount; i++){cout << power[i] << "\t";}cout << endl;}
	//插入数字,插入新数字之后数组依旧有序cout << "请输入要插入的数字" << endl;double insert_power;cin >> insert_power;    // 1. 放在末尾,再排序// 2. 找到第一个比插入数大的元素位置,其后的元素一次往后移动一位int insert_index = powerCount;for(int i = 0; i < powerCount; i++){if(power[i] > insert_power){cout << power[i] << insert_power;insert_index = i;break;}}for(int i = powerCount-1; i >= insert_index; i--){power[i+1] = power[i];}power[insert_index] = insert_power;powerCount+=1;cout << "插入元素后的数组为"<< endl;for(int i = 0; i < powerCount; i++){cout << power[i] << "\t";}
	// 删除元素,找到要删除的元素位置,将其后的元素往前移动一位// 没有判断相同元素double delete_power;int delete_index = -1;cout << "请输出要删除的元素" << endl;cin >> delete_power;for(int i = 0; i < powerCount; i++){if(power[i] == delete_power){delete_index = i;break;}}if(delete_index == -1){cout << "没有找到要删除的元素" << endl;}else{for(int i = delete_index; i < powerCount; i++){power[i] = power[i+1];}powerCount-=1;cout << "删除元素后的数组为"<< endl;for(int i = 0; i < powerCount; i++){cout << power[i] << "\t";}}return 0;
//}

array

用array定义数组与原来的方式定义数组效果是一样的

#include <array>
int value1[5];
array<int 5> value2;  //至少是c++11才支持

3.二维数组

3.1数组定义

datatype name[rowSize][colSize];
double score[5][3]
int prices[4][4]

3.2二维数组的动态赋值

demo:输入学生各门课程的成绩

在这里插入代码片int main(){string stu_names[] = {"刘备","关羽", "张飞"};string course_names[] = {"数学", "语文", "英语"};const int ROW = 3;  // sizeof(stu_names) / sizeof(stu_names[0])   双字名字下可以这么写,其他情况下不行const int COL = 3;double scores[ROW][COL];for(int i = 0; i < ROW; i++){for(int j = 0; j < COL; j++){cout << stu_names[i] << "的" << course_names[j] << "成绩为:";cin >> scores[i][j];}}cout << "\t";for(int i = 0; i < COL; i++){cout << course_names[i] << "\t";}cout << endl;for(int i = 0; i < ROW; i++){cout << stu_names[i] << "\t";for(int j = 0; j < COL; j++){cout << scores[i][j] << "\t";}cout << endl;}return 0;
}
        数学    语文    英语
刘备    1       2       3
关羽    4       5       6
张飞    7       8       9

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

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

相关文章

关于去苹果服务器验证充值的一些看法

前端时间看了下关于app充值验证发送游戏金币的好多帖子和文章,也总结了一下app校验的php代码:可以参考我的上一封博客: http://blog.csdn.net/pbymw8iwm/article/details/42167125 其中这个帖子回复的大神比较多:点击打开链接 有些人认为拿苹果的receptdata去验证,通过返…

终于,我读懂了所有Java集合——queue篇

Stack 基于Vector实现&#xff0c;支持LIFO。 类声明 public class Stack<E> extends Vector<E> {} push public E push(E item) {addElement(item);return item; } pop public synchronized E pop() {E obj;int len size();obj peek();removeElementAt(…

IAP-应用内购买流程

成为ios开发者最大的好处就是&#xff0c;你编写的应用程序会有很多方式可以赚钱。比如&#xff0c;收费版&#xff0c;免费挂广告版&#xff0c;还有就是程序内置购买。 程序内置购买会让你爱不释手&#xff0c;主要有以下原因&#xff1a; 除了程序本身的下载收费以外&#x…

C++(8.5)--Vector容器

向量容器Vector1. 定义/初始化2. 遍历3. 常用操作vector 迭代器遍历&#xff0c;sort, reverse,1. 定义/初始化 vector是同一类型对象的集合&#xff0c;被称作容器。vector实际是一个类模版&#xff0c;可用于保存多种数据类型的数据&#xff08;确定类型的vector 就只能装同…

关于mysql的change和modify

前端时间要写个游戏里的邮件系统&#xff0c;定义了一个如下的表结构&#xff1a; CREATE TABLE sysmail (mailid int(20) NOT NULL AUTO_INCREMENT,sendtime int(11) NOT NULL DEFAULT 0,mailtitle varchar(512) COLLATE utf8_bin NOT NULL DEFAULT ,mailcontext varchar(2048…

终于,我读懂了所有Java集合——map篇

首先&#xff0c;红黑树细节暂时撸不出来&#xff0c;所以没写&#xff0c;承诺年前一定写 HashMap &#xff08;底层是数组链表/红黑树&#xff0c;无序键值对集合&#xff0c;非线程安全&#xff09; 基于哈希表实现&#xff0c;链地址法。 loadFactor默认为0.75&#xff0…

valgrind工具使用详解

zz自 http://blog.csdn.net/destina/article/details/6198443 感谢作者的分享&#xff01; 一 valgrind是什么&#xff1f; Valgrind是一套Linux下&#xff0c;开放源代码&#xff08;GPL V2&#xff09;的仿真调试工具的集合。Valgrind由内核&#xff08;core&#xff09;以…

C++(9)--裸指针、智能指针、引用

指针1.裸指针的基本概念1.1 裸指针的声明*/初始化&1.2 操作裸指针--间接运算符*1.3 裸指针使用 demo--指向一个简单变量1.4 空指针--nullptr1.5 特殊指针--void *ptr2.指针和引用--引用定义&3.指针和数组3.1 数组指针的定义3.2 数组指针递增/递减操作3.3 指针与数组使用…

关于valgrind的安装和内存泄露分析

程序的安装 如果使用的是tar包安装. valgrind # wget http://valgrind.org/downloads/valgrind-3.9.0.tar.bz2 # tar -jxvf valgrind-3.9.0.tar.bz2 # cd valgrind-3.9.0 # ./autogen.sh # ./configure # make; make install 使用命令: valgrind --tool=memcheck --leak-…

关于mysql的cpu占用高的问题

现在游戏开了泰服 ,发现泰服的cpu占用率总是比繁体或者大陆的高很多,每次都是占用了300%多 top - 15:34:06 up 222 days, 2:51, 2 users, load average: 0.75, 0.73, 0.66 Tasks: 215 total, 1 running, 214 sleeping, 0 stopped, 0 zombie Cpu(s): 52.4%us, 8.5%…

网络原理知识点汇总

OSI七层模型 vs. TCP/IP 五层模型&#xff08;有时候也说四层&#xff09;及各层协议 七层&#xff1a;物理层&#xff1a;为数据端设备提供传送数据的通路&#xff0c; IEEE802 数据链路层&#xff1a;提供介质访问和链路管理&#xff0c; ARP&#xff0c;MTU 网络层&#xf…

无限踩坑系列(8)--猿界神猿

计算机一句话冷知识1.GNU2. Unix与C语言3. Linux与git-hub4. c/c 编译器5. python1.GNU GNU是一个自由的操作系统&#xff0c;其内容软件完全以GPL方式发布。 GNU&#xff1a;GNU’s Not Unix!的递归缩写 Unix 商业化之后&#xff0c; RMS发起了GNU计划&#xff0c;在该计划下…

C++实现md5加密或计算文件的唯一性识别

由于网络上传了很多关于C实现md5加密的类&#xff0c;至于那个是原创&#xff0c;我不敢妄加猜测&#xff0c;只是这里我声明我是转载的&#xff0c;并支持原创。 对于md5加密算法&#xff0c;我提供两文件&#xff1a; #ifndef MD5_H #define MD5_H #include <string>…

Crontab的格式

第1列分钟1&#xff5e;59 第2列小时1&#xff5e;23&#xff08;0表示子夜&#xff09; 第3列日1&#xff5e;31 第4列月1&#xff5e;12 第5列星期0&#xff5e;6&#xff08;0表示星期天&#xff09; 第6列要运行的命令 下面是crontab的格式&#xff1a; 分 时 日 月 星期 要…

leetcode516 最长回文子序列

给定一个字符串s&#xff0c;找到其中最长的回文子序列。可以假设s的最大长度为1000。 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bbbb"。 示例 2: 输入: "cbbd" 输出: 2 一个可能的最长回文子序列为 "bb"。 …

C++(10)--动态分配内存new,程序的内存分配

动态分配内存1. 动态分配内存1.1使用new分配内存1.2使用delete释放内存1.3使用new创建动态分配的数组2. 程序的内存分配3.数组与指针案例实践4.二维数组与指针《老九学堂C课程》《C primer》学习笔记。《老九学堂C课程》详情请到B站搜索《老九零基础学编程C入门》-------------…

社交app应用开发 客户端+服务器源码

原帖地址&#xff1a;http://www.devdiv.com/iOS_iPhone-想学习移动社交APP的童鞋有福了&#xff0c;图文展示&#xff0c;附客户端&#xff0c;服务端源码。-thread-121444-1-1.html 想学习移动社交APP的童鞋有福了&#xff0c;图文展示&#xff0c;附客户端&#xff0c;服务…

leetcode83 删除排序链表中的重复元素

给定一个排序链表&#xff0c;删除所有重复的元素&#xff0c;使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 思路&#xff1a;判断下一个是否相同即可。 /*** Definition for singl…

tcpdump的用法

第一种是关于类型的关键字&#xff0c;主要包括host&#xff0c;net&#xff0c;port, 例如 host 210.27.48.2&#xff0c;指明 210.27.48.2是一台主机&#xff0c;net 202.0.0.0 指明 202.0.0.0是一个网络地址&#xff0c;port 23 指明端口号是23。如果没有指定类型&#xff0…