静态数组和动态数组的区别

静态数组和动态数组的区别

C语言自带的数组不够灵活 例int arr[10];

静态数组缺点:
长度不可修改;局部变量长度不能超过一兆 全局变量有题目限制;数组作为参数不方便 不知道长度只有数组首地址

解决方法:纯C 弄一个固定大小的数据 局部不够用全局 全局放不下 考虑算法问题 传参传两个参数;C++ 动态数组STL vector

学习方法:
学习别人写好的数据结构 四个方面增删查改
增:构造和初始化;插入
查:访问某一个元素 整个vector怎么遍历 元素信息反过来找位置 查找算法
改:修改数据
删除:删除某个;全部清空

新的工具:迭代器
iterator 通用方法可以访问不同种类的数据结构 可以理解成高级版本的指针
迭代器定义:动态数组的类型::iterator
例: vector ::iterator
调用begin()函数获得起始位置和end()函数尾后位置,迭代器可以获取元素的位置, insert会修改动态数组的结构,插入完成以后it的指向无意义
it=it+3 相当于三次++ 只能在vector中使用
vector在中间插入效率低 最好还是用push_back在尾部插入

list的使用提升在中间插入删除的效率
list中使用erase和insert效率更高一点
优先使用vector然后再考虑list

#include <iostream>
#include <vector>//vector头文件
#include <list>//list头文件
using namespace std;
int  main(){
    vector<int>::iterator it1;
    vector<int> vec1(10);//创建size为10的数组 元素类型是int 初始值默认为0
    //插入数据 push_back尾部进行插入效率高 在中间插入效率很低
    for(int i=0;i<10;++i){
        vec1.push_back(i);
    }//插入到末尾
    for(it1=vec1.begin();it1!=vec1.end();++it1){
        printf("%d ",*it1);//这里使用的是*it1
    }
    printf("\n");
    //随机插入
    //查找 根据数组下标访问对应元素 支持随机访问 数组下标范围与静态数组一致
    vector<int> vec2={1,3,5,7,9};
    printf("%d ",vec2[1]);
    //获取vector的长度 vector.size()
    int size=vec2.size();
    printf("%d ",size);
    //迭代器 通用方法访问不同种类的数据结构 高级版本指针
    //定义迭代器 间接访问数组中的内容 支持自增操作

    for(it1=vec2.begin();it1!=vec2.end();++it1){
        printf("%d ",*it1);//这里使用的是*it1
    }
    printf("\n");

    it1=vec1.begin();
    //能够往中间插入删除
    vec1.insert(it1,2);
    for(it1=vec1.begin();it1!=vec1.end();++it1){
        printf("%d ",*it1);//这里使用的是*it1
    }

    //迭代器可以获取元素的位置 插入完成之后it的指向就失效了 还想要使用要重新赋值
    //删除clear将整个动态数组中的元素全部清空
    //pop_back()删除最后一个元素
    //删除中间的元素 还要使用erase
    it1=vec1.begin();
    vec1.erase(it1);
    for(it1=vec1.begin();it1!=vec1.end();++it1){
        printf("%d ",*it1);//这里使用的是*it1
    }

    //中间插入删除使用list 不支持随机访问
    //链表中不能使用it=it+1;只能用it++ 迭代器

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值