C++——二维数组和对象数组
6.3 二维数组的声明和引用
声明:数据类型 标识符[常量表达式1][常量表达式2];int a[3][4];
表示a为整型二维数组,其中第一维有3个下标(0~2),第二维有4个下标(0~3),数组元素12个,可以用来存放3行4列的整型数据表格。可以理解为:
a[0]——a 00 a01 a02 a03
a[1]——a10 a11 a12 a13
a[2]——a20 a21 a22 a23存储顺序是按行存储a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23
引用的时候下标不可越界,例如b[1][5]=a[2][3]/2,不可以写成a[3][4],否则发生错误。
二维数组的初始化
将所有数据写在一个{}内,按顺序赋值,例如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
分行给二维数组赋初值,例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
可以对部分元素赋初值,例如:static int a[3][4]={{1},{0,6},{0,0,11}};
数组作为函数参数
数组元素作为实参,与单个变量一样。
数组名作为参数,形实参数都应是数组名,类型要一样,传送的是数组首地址。对形参数组的改变会直接影响到实参数组。
#include <iostream>
using namespace std;
void RowSum(int A[][4], int nrow) //计算二维数组A每行元素的值的和,nrow是行数
{ for (int i = 0; i < nrow; i++)
{
for(int j = 1; j < 4; j++)
A[i][0] += A[i][j];
}
}
int main() //主函数
{
int Table[3][4] = {{1,2,3,4},{2,3,4,5},{3,4,5,6}}; //声明并初始化数组
for (int i = 0; i < 3; i++) //输出数组元素
{
for (int j = 0; j < 4; j++)
cout << Table[i][j] << " ";
cout << endl;
}
RowSum(Table,3); //调用子函数,计算各行和
for (i = 0; i < 3; i++) //输出计算结果
{
cout << "Sum of row " << i << " is " <<Table[i][0]<< endl;
}
}
运行结果:
1 2 3 4
2 3 4 5
3 4 5 6
Sum of row 0 is 10
Sum of row 1 is 14
Sum of row 2 is 18
10 14 18
6.3 对象数组
声明:类名 数组名[元素个数];
访问方法:通过下标访问 数组名[下标].成员名
初始化:数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。
通过初始化列表赋值:point A[2]={point(1,2),point(3,4)};
如果没有为数组显示指定初始值,数组元素使用默认值初始化(调用默认构造函数)
//Point.h
#if !defined(_POINT_H)
#define _POINT_H
class Point
{ public:
Point();
Point(int xx,int yy);
~Point();
void Move(int x,int y);
int GetX() {return X;}
int GetY() {return Y;}
private:
int X,Y;
};
#endif
//Point.cpp
#include<iostream>
using namespace std;
#include "Point.h"
Point::Point()
{ X=Y=0;
cout<<"Default Constructor called."<<endl;
}
Point::Point(int xx,int yy)
{ X=xx;
Y=yy;
cout<< "Constructor called."<<endl;
}
Point ::~Point()
{ cout<<"Destructor called."<<endl; }
void Point ::Move(int x,int y)
{ X=x; Y=y; }
#include<iostream>
#include "Point.h"
using namespace std;
int main()
{ cout<<"Entering main..."<<endl;
Point A[2];
for(int i=0;i<2;i++)
A[i].Move(i+10,i+20);
cout<<"Exiting main..."<<endl;
return 0;
}
C++——二维数组和对象数组的更多相关文章
- java 二维数组和对象数组
1.二维数组:二维数组就是存储一维数组(内存地址/引用)的数组 2.二维数组的初始化 1) int intA[][]={{1,2},{2,3},{3,4,5}}; 2) int [][] intB=n ...
- 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~
P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
- Java基础系列 - 数组、二维数组、对象数组
package com.test2; public class demo2 { public static void main(String[] args) { /** * 一维数组使用 */ //数 ...
- Java 学习笔记 二维数组和对象数组
定义二维数组 int[][] a = new int[4][5]; 可以不指定列数 int[][] a = new int[4][]; 获取行 int i = a.length(); 如果使用第一个例 ...
- poj3067 二维偏序树状数组
题解是直接对一维升序排列,然后计算有树状数组中比二维小的点即可 但是对二维降序排列为什么不信呢?? /* */ #include<iostream> #include<cstring ...
- hdu1081 DP类最大子段和(二维压缩+前缀和数组/树状数组计数)
题意:给出一个 n * n 的数字矩阵,问最大子矩阵和是多少. 由于和最长子段和问题类似,一开始想到的就是 DP ,一开始我准备用两个循环进行 DP ,对于每一个 (i,j) ,考察(i - 1,j) ...
- 二维偏序+树状数组【P3431】[POI2005]AUT-The Bus
Description Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个 ...
- $[SHOI2007]$ 园丁的烦恼 二维数点/树状数组
\(Sol\) 设一个矩阵的左上角为\((x_1,y_1)\),右下角为\((x_2,y_2)\),\(s_{x,y}\)是到\((1,1)\)二维前缀和,那么这个矩阵的答案显然是\(s_{x_2,y ...
- 087、Java数组之对象数组的静态初始化
01.代码如下: package TIANPAN; class Book { private String title; private double price; public Book(Strin ...
随机推荐
- [MongoDB]MongoDB的ObjectId组成
一.ObjectId的组成首先通过终端命令行,向mongodb的collection中插入一条不带“_id”的记录.然后,通过查询刚插入的数据,发现自动生成了一个objectId“5e4fa350b6 ...
- HTML5文档类型如何定义,有哪些标签,以及如何使用,从整体认识HTML5
html5新增结构标签 header 头部 nav 导航 section 区域 article 文章 aside 侧边栏 figure 一组多媒体内容 figcaption 多媒体内容的标题 foot ...
- char、vchar、nvarchar 的区别
Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示 如果还为了这个纠结,就直接看看后面的解说,做决定吧. 一般如果用到中文或者其 ...
- linux系统挂载u盘拷贝文件
linux系统在不能远程的情况下用u盘传文件(比如服务器装上系统还没配IP),需要先将u盘挂载到系统中的某个位置,再使用cp命令拷贝文件,简要步骤如下: 1.把U盘插入Linux电脑,确保U盘指示灯是 ...
- lombok版本过低报错
调试报错Error:java: java.lang.ExceptionInInitializerError com.sun.tools.javac.code.TypeTags JAVA12调整原有项 ...
- Educational Codeforces Round 46 (Rated for Div. 2) D
dp[i]表示一定包含第I个点的好的子序列个数,那么最终答案就是求dp[0] + dp[1] + .... + dp[n-1] 最终的子序列被分成了很多块,因此很明显我们枚举第一块,第一块和剩下的再去 ...
- gulp常用插件之http-proxy-middleware使用
更多gulp常用插件使用请访问:gulp常用插件汇总 http-proxy-middleware这是一个用于后台将请求转发给其它服务器.其实这并不是转给gulp使用的,在其它构建工具也可以用. 更多使 ...
- PUT方法写shell
前言: PUT是http的一个请求方法 PUT的前提,是了解HTTP协议.下面给出HTTP - PUT的一个模板: PUT /test.txt HTTP/1.1 Accept: */* Accept- ...
- Postman: Test
Tests 参考:Writing Tests Testing examples 这里写测试用例,进行一些判断等等.即处理断言 下面新建了两个测试用例,名字分别是”Status code is 200“ ...
- Python三元表达式、列表推导式、生成器表达式
1. 三元表达式 name=input('姓名>>: ') res='SB' if name == 'aaaa' else 'NB' print(res) 2. 列表推导式 #1.示例 e ...