首先复习array类对象,他是一个数组类。
①首先需要头文件<array>;
②声明格式:array<类型名, 成员数量>数组名;
③初始化:array<类型名, 成员数量>数组名={成员1, 成员2,……};
④需要使用名称空间std(就像cin和cout那样);
⑤类型名可以为字符串,或者string类等。
若要在函数中引入array对象,那么将和结构、string类似。
引入array对象:则传递的参数应为:array<类型名, 成员数量>
直接修改原array对象:在前者的前提下,使用指针或者地址运算符&
如代码;
#include<iostream>
#include<array>
using namespace std;
const int m = 4;
void show(array<double, m>,array<char[10],m>); //显示,输入int类型和字符串类型的array数组
void change(array<double, m>*); //指针作为参数,使原数组的值+1。
array<double, m> half(array<double, m>*); //将数组地址作为参数,将输入值乘以1/2并返回一个array数组(double类型)
array<double, m>*zhizhen(array<double, m>); //输入array数组,返回一个新数组的指针
int main()
{
array<double, m>player = { 10,15,20,25 }; //创建一个array对象数组
array<char[10], m>shuxing = { "str: ","dex: ","def: ","luck: " }; //创建属性描述数组,array可以创建其他类对象,比如字符串、string类等
show(player,shuxing); //调用函数,显示player
cout << endl;
cout << "******修改属性ing*****" << endl << endl;;
change(&player); //将player的地址作为参数,然后调用change函数,无返回值。
show(player,shuxing); //显示改变之后的player数组
cout << endl << "**********现在将属性减半****************" << endl << endl;
array<double, m>player_2 = half(&player); //调用half函数,将player减半后的数值赋值给player_2数组
show(player_2, shuxing); //显示player_2数组
array<double, m>*another = zhizhen(player_2); //player_2数组作为参数,返回值为指针,赋值给array指针another
show(*another, shuxing); //显示another数组
system("pause");
return 0;
}
void show(array<double, m>player,array<char[10],m>shuxing) //array数组作为参数,无返回值
{
static int n = 1; //局部函数静态变量n,用于计数属性显示次数。
cout << "这是第 "<<n<<" 次显示属性:" << endl;
for (int i = 0;i < m;i++)
cout << shuxing[i] << player[i] << endl; //循环输出属性
cout << "————————————" << endl << endl;
n++;
}
void change(array<double, m>*player) //array指针作为参数,无返回值(直接通过指针操纵数组)
{
for (int i = 0;i < m;i++)
(*player)[i] += 1; //引入的是指针,直接通过指针操纵值每个都加1
}
array<double, m> half(array<double, m>*player) //array指针作为参数,返回array数组(一个新的数组)
{
array<double, m> half; //创建一个新数组
for (int i = 0;i < m;i++)
half[i]=(*player)[i] / 2; //新数组的值是指针指向数组的值的1/2
return half; //返回数组
}
array<double, m>*zhizhen(array<double, m>player) //array数组作为参数,返回指针(一个新的指针)
{
array<double, m>*x = new array<double, m>; //new一个array对象指针数组
for (int i = 0;i < m;i++)
(*x)[i] = player[i]+20; //指针数组的值,是数组对应位置的值+20
return x; //返回指针
}
输出:
这是第 1 次显示属性:
str: 10
dex: 15
def: 20
luck: 25
————————————
******修改属性ing*****
这是第 2 次显示属性:
str: 11
dex: 16
def: 21
luck: 26
————————————
**********现在将属性减半****************
这是第 3 次显示属性:
str: 5.5
dex: 8
def: 10.5
luck: 13
————————————
这是第 4 次显示属性:
str: 25.5
dex: 28
def: 30.5
luck: 33
————————————
请按任意键继续. . .
解释:
①思路是:
创建一个double数组,一个char[10]数组,前者为属性,后者为文字;
输出这个数组(show函数);
这个数组的地址作为参数,通过函数来使得这个数组的每个成员的值都+1(change函数);输出原array数组指针的值(show函数)
创建一个新array数组,调用函数half,使新数组的值,为函数half参数的数组的值的一半;输出新的array数组的值(show函数)
创建一个新的array数组指针,调用函数zhizhen,在函数中,创建一个新的指针,这个指针每个成员的值,为作为参数的数组成员的值+20,然后函数返回新指针的地址。于是,将函数返回值的地址,赋给新的array数组指针。输出新的array数组指针的值(show函数)
②注:蓝色字体在函数原型时可以省略
把array数组作为参数:
array<类型名,成员数> 变量名
void show(array<double, m>,array<char[10],m>);
把array数组指针(地址)作为参数:
array<类型名,成员数>* 变量名
void change(array<double, m>*);
返回值为array数组:
array<类型名,成员数> 函数名( 传递的参数 )
array<double, m> half(array<double, m>*)
返回值为array指针:
array<类型名,成员数>* 函数名( 传递的参数 )
array<double, m>*zhizhen(array<double, m>)