当前位置: 代码迷 >> 综合 >> C++实现动态数组总结
  详细解决方案

C++实现动态数组总结

热度:101   发布时间:2023-10-23 03:53:40.0
1.建立一维整数动态数组方法,需要指明数组个数ncin>>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.建立结构体二维动态数组,需要指明结构体个数nvector<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.建立结构体二维动态数组,不需要指明整数nvector<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×

  相关解决方案