C++实现动态数组总结

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×

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值