固定长度的二维数组:http://c.biancheng.net/view/200.html
(三种主要初始化方法)
动态变换的二维数组
1.用(数组+指针)创建
#include<iostream>
using namespace std;
int main()
{
int row, column;
while (cin >> row >> column)
{
//申请空间
int** matrix = new int*[row];
for (int i = 0; i < row; i++)
matrix[i] = new int[column];
//使用空间
for (int i = 0; i < row; i++)
for (int j = 0; j < column; j++)
matrix[i][j] = rand() % 100;
//展示
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
cout << matrix[i][j] << " ";
}
cout << endl;
}
//释放空间
//1、从申请空间反过来写
//2、记得写指针=NULL
for (int i = 0; i < row; i++)
{
delete matrix[i];
matrix[i] = NULL;
}
delete[row]matrix;
matrix = NULL;
}
}
结果展示:
2、利用vector创建
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int row, column;
while (cin >> row >> column)
{
//申请空间
vector<vector<int>>matrix(row,vector<int>(column));
//vector初始化规则:vector<type>name(size,value) value指定了所有元素的初始值(可省略),size为长度
//使用空间
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
matrix[i][j] = rand() % 100;//这里一般会用push_back(),否则容易数组越界错误
}
}
//展示
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
cout<<matrix[i][j]<<" ";
}
cout << endl;
}
}
}
结果展示:
例题:
1.(数组+指针)
#include<iostream>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
//申请空间
int** matrix = new int* [n];
for (int i = 0; i < n; ++i)
{
matrix[i] = new int[n];
}
//赋值
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
int m;
cin >> m;
matrix[i][j] = m;
}
}
//部分输出
for (int i = 1; i < n - 1; i++)
{
for (int j = 1; j < n - 2; j++)
{
cout << matrix[i][j] << " ";
}
cout << matrix[i][n - 2]<<endl;
}
//对角线求和
int sum = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (i == j)sum += matrix[i][j];
}
}
cout << sum << endl;
}
}
2.(vector)
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
vector<vector<char>>keywords(n, vector<char>());
for (int i = 0; i < n; i++)
{
string key;
cin >> key;
for (int j = 0; j < key.length(); j++)
{
keywords[i].push_back( key[j]);//这里不用push_back会报错:数组越界
}
}
vector<char>Min = keywords[0];
char* Min_copy = &Min.at(0);
int len_Min=Min.size();
for (int i = 0; i < n; i++)
{
char* temp = &keywords[i].at(0);
int len_Min_copy = keywords[i].size();//数组长度在 数组地址作为参数 进入函数后 无法计算,因此必须先计算长度并输入
if (strcmp(temp, Min_copy) < 0)
{
Min_copy = temp;
len_Min = len_Min_copy;
}
}
for (int i = 0; i <len_Min; i++)
{
cout << Min_copy[i];
}
cout << endl;
}
}