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

c++基础——数组

数组

数组是存放相同类型对象的容器,数组中存放的对象没有名字,而是要通过其所在的位置访问。数组的大小是固定的,不能随意改变数组的长度。

定义数组

数组的声明形如 a[b],其中,a 是数组的名字,b 是数组中元素的个数。

int d1 = 50;
const int d2 = 50;
int arr1[d1];  // 错误:d1 不是常量表达式
int arr2[d2];  // 正确:arr2 是一个长度为 42 的数组
int arr3[50];  //当然这种也可以

不能将一个数组直接赋值给另一个数组:

int arr1[3];
int arr2 = arr1;  // 错误
arr2 = arr1;      // 错误

应该尽量将较大的数组定义为全局变量。因为局部变量会被创建在栈区中,过大(大于栈的大小)的数组会爆栈,进而导致 RE。如果将数组声明在全局作用域中,就会在静态区中创建数组。

访问数组元素

可以通过下标运算符 [] 来访问数组内元素,数组的索引(即方括号中的值)从 0 开始。以一个包含 10 个元素的数组为例,它的索引为 0 到 9,而非 1 到 10。但在 OI 中,为了使用方便,我们通常会将数组开大一点,不使用数组的第一个元素,从下标 1 开始访问数组元素。

例 1:从标准输入中读取一个整数n,再读取n个数,存入数组中。其中,n<=1000。

#include <iostream>
using namespace std;int arr[1001];  // 数组 arr 的下标范围是 [0, 1001)int main() {int n;cin >> n;for (int i = 1; i <= n; i++) {cin >> arr[i];}
}

例 2:求和数组 arr 中的元素,并输出和。

#include <iostream>
using namespace std;int arr[1001];int main() {int n;cin >> n;for (int i = 1; i <= n; ++i) {cin >> arr[i];}int sum = 0;for (int i = 1; i <= n; ++i) {sum += arr[i];}cout<<sum;return 0;
}

越界访问下标

数组的下标n应当满足0<=n<边界

多维数组

多维数组的实质是「数组的数组」,即外层数组的元素是数组。一个二维数组需要两个维度来定义:数组的长度和数组内元素的长度。访问二维数组时需要写出两个索引:

int arr[3][4];  // 一个长度为 3 的数组,它的元素是「元素为 int 的长度为的 4 的数组」arr[2][1] = 1;  // 访问二维数组

我们经常使用嵌套的 for 循环来处理二维数组。

例:从标准输入中读取两个数n和m,分别表示黑白图片的高与宽,满足n,m<=1000。对于接下来的n行数据,每行有用空格分隔开的m个数,代表这一位置的亮度值。现在我们读取这张图片,并将其存入二维数组中。

const int maxn = 1001;
int arr[maxn][maxn];
int n, m;cin >> n >> m;
for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j) cin >> arr[i][j];

http://www.lryc.cn/news/26952.html

相关文章:

  • odoo15 登录界面的标题自定义
  • 【内网服务通过跳板机和公网通信】花生壳内网穿透+Nginx内网转发+mqtt服务搭建
  • 【多线程常见面试题】
  • 深度剖析指针(下)——“C”
  • 爬虫与反爬虫技术简介
  • Pag的2D渲染执行流程
  • k8s 概念说明,k8s面试题
  • Docker--(四)--搭建私有仓库(registry、harbor)
  • Invalid <url-pattern> [sso.action] in filter mapping
  • 【11】linux命令每日分享——useradd添加用户
  • Newman+Jenkins实现接口自动化测试
  • MySQL:事务+@Transactional注解
  • 数字IC手撕代码--低功耗设计 Clock Gating
  • 易基因|m6A RNA甲基化研究的数据挖掘思路:干货系列
  • 【微信小程序】-- 页面配置(十八)
  • 玩好 StarRocks,大厂 offer 接不完!|字节跳动、小红书、京东物流、唯品会、腾讯音乐要的就是你!
  • C# IoC控制反转学习笔记
  • Python解题 - CSDN周赛第33期
  • Session攻击
  • 【Linux】Shell详解
  • 汉字找不同隐私协议
  • CEC2017:斑马优化算法(Zebra Optimization Algorithm,ZOA)求解cec2017(提供MATLAB代码)
  • 【Linux要笑着学】进程创建 | 进程终止 | slab分派器
  • 数据资产管理建设思考(二)
  • 微软发布多模态版ChatGPT!取名“宇宙一代”
  • 【学习笔记】深入理解JVM之对象的实例化
  • IP协议的漏洞及防护措施
  • Linux命令·mkdir
  • 智能家居项目(八)之树莓派+摄像头进行人脸识别
  • 渗透测试之地基服务篇:无线攻防之钓鱼无线攻击(上)