1.建立一维整数动态数组方法,需要指明数组个数n
cin>>n;
int *arr = new int[n]; // 注意n要先键入
2.建立一维动态数组方法,不用指明数组个数
vector<int> vec; // 头文件include<vector>
2.1 添加元素
vec.push_back(element);
2.2 遍历vector容器
vector<int>::iterator iter;
for(iter=vec.begin(); iter!=vec.end(); iter++)
cout<<*iter<<endl;
2.3 一维vector降序排序
sort(vec.begin(), vec.end(), greater()); // sort默认是升序
2.4 一维vector求最大(小)值
int max_value = *max_element(vec.begin(), vec.end());
int min_value = *min_element(vec.begin(), vec.end());
2.5 一维vector求最大(小)值的索引
int max_position = max_element(vec.begin(), vec.end())-vec.begin();
int min_position = min_element(vec.begin(), vec.end())-vec.begin();
3.建立二维整数动态数组方法
cin>>n>>m; // 建立一个array[n][m]的二维动态数组;
int **arr = new int*[n];
for(int i = 0; i < n; i++)
arr[i] = new int[m];
4.建立结构体一维动态数组
// 定义结构体
struct link{
char c;
int num;
};
vector<link> vec; // 头文件#include<vector>
5.建立结构体二维动态数组,需要指明结构体个数n
vector<link> *vec = new vector<link>[n]; // 法一
vector<link> vec[n]; // 法二
5.1 遍历
for(int i = 0; i < n; i++)
{
vector<link>::iterator iter;
for(iter=vec[i].begin(); iter!=vec[i].end(); iter++)
cout<<iter->c<<" "<<iter->num<<endl;
}
5.2 利用vector建立二维(n*m)vector,并且初始化为0
vector<vector<int>> vec_2d(n, vector<int>(m, 0));
5.2.1 对二维vector进行多键值排序
sort(vec_2d.begin(), vec_2d.end(),[](const vector<int> &a, const vector<int> &b){
return a[0]<b[0]; // 按照m这个维度升序
});
6.建立结构体二维动态数组,不需要指明整数n
vector<vector<link> > vec;
6.1 遍历
vector<vector<link> >::iterator iter;
for(iter=vec.begin(); iter!=vec.end(); iter++)
{
vector<link>::iterator it;
for(it=iter->begin(); it!=iter->end(); it++) // 迭代器这里注意it->begin()
cout<<it->c<<" "<<it->num<<endl; // 注意it->c,不能写成it.c
}
7.实践应用
问题:以换行符分割,用二维动态数组存储数据。如:
R1 S1
R2 S0 R0 S2
S1 R1 R0
要求:a.分离字母和数字,即“R1”分离出“R”与“1”;
b.以换行符为分割,存储上诉数据,即每行用一个vector存储
代码实现
// 定义结构体,记录每个字母和数字
typedef struct process{
char c;
int num;
}process;
cin>>n; // 确定有多少行
vector<process> vec[n]; // 定义二维动态数组
for(int i=0; i<n; i++)
{
process p;
char c;
int num;
// 输入一行数据,出现换行符则结束
while(true)
{
cin>>c>>num; // 一个字符一个字符的读取
p.c = c;
p.num = num;
vec[i].push_back(p);
cin.get(c); // 读取一个字符,很好
if(c == '\n') // 换行符结束
break;
}
}
// 遍历该二维动态数组
for(int i = 0; i < n; i++)
{
vector<process>::iterator iter;
for(iter=vec[i].begin(); iter!=vec[i].end(); iter++)
cout<<iter->c<<" "<<iter->num<<" ";
cout<<endl;
}
Enable GingerCannot connect to Ginger Check your internet connection
or reload the browserDisable in this text fieldRephraseRephrase current sentence2Edit in Ginger×