在使用c++进行数据处理时,常常会涉及到数组的使用,数组可以分为静态数组与动态数组,其中静态数组长度已被限制,往往无法满足实际需要。现在主要对动态数组的使用进行小结。
1、静态数组的声明
如声明长度为10的整数一维数组
int array[10] ;
其他类型的一维数组声明类似,不再进行详述。
注: int array[变量] 程序报错:变量必须是个常量
2、动态数组的声明及使用
原理:动态数组是通过云算符new进行创建,而数组变量实际上是个指针,因此利用new符号创建的数组,可以当成一般数组对待。
(1)如何创建动态数组并赋值
#include<iostream>
#include<vector>
using namespace std;
void main()
{
int a = 10;
double *doublePtr;//声明数组类型指针:double类型的数组指针
doublePtr = new double[a];//开辟相应的内存空间
for (int i = 0; i < a; i++)//最后对其进行赋值
{
doublePtr[i] = a - i;
}
}
(2) 二维动态数组的申明与使用
1.静态二维数组的申明,较为简单,格式如下:
类型 变量名[][]
如double array[2][3];
这样就是说其行列明确,否则出错。
2. 动态二维数组的申明
以申明double array[m][n]为例进行讲解
double **array;
array=new double *[m];//申明行数
for(int i=0;i<m;i++)
{
array[i]=new double[n];//申明每一行的列数
}
即可完成,即使用了两次一维动态数组申明。
#include <iostream>
using namespace std;
#include<string>
void main()
{
int m = 5;
int n = 2;
double **array;
array = new double *[m];//先定义有多少行 有5行
for (int i = 0; i < m; i++)
{
array[i] = new double[n];//再定义每一行有多少列 有6列
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
array[i][j] = 1;
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cout << array[i][j] << "\t";
}
cout << endl;
}
system("pause");
}
(3)如果一个二维数组作为一个函数中参数,该如何使用,思想是容器的容器
如求取一个二维数组中所有元素之和的函数
#include<iostream>
#include<vector>
using namespace std;
double sum(const vector<vector<double>> vec_vec_a)
{
double m_sum = 0;
for (int i = 0; i < vec_vec_a.size(); i++)//行数
{
for (int j = 0; j < vec_vec_a[i].size(); j++)
{
m_sum += vec_vec_a[i][j];
}
}
return m_sum;
}
void main()
{
vector<double> a, b;//a b的容器尺寸可以不一样大
a.push_back(1);
a.push_back(1);
a.push_back(1);
b.push_back(2);
b.push_back(2);
vector<vector<double>> c;
c.push_back(a);
c.push_back(b);
for (int i = 0; i < c.size(); i++)
{
for (int j = 0; j < c[i].size(); j++)
{
cout << c[i][j] << "\t";
}
cout << endl;
}
cout << sum(c) << endl;
system("pause");
}