C++学习总结_5

模板

    返回值可以使任意类型
    泛型编程的基础

    模板函数

        template <typename T>
        T func(T number1, T number2){

            return number1 + number2;
        }

    模板类

        template <class T>
        class MyTemp{

          public:
            MyTemp(T a, T b){

                this->a = a;
                this->b = b;
            }
            T a;
            T b;
        };

    /*实例化模板类对象时,要确定模板类的数据类型*/

STL(容器、算法、迭代器)

    STL容器

        顺序容器
            vector(向量)//动态数组
            list(列表)//双向链表

        关联容器

    vector容器(动态数组)

        特点

        动态扩展:找到比原空间更大的空间,拷贝原空间内容,释放原空间//效率较慢
        vector数据存储在堆上

    注意:释放空间

        vector<int> v_int;    //创建vector容器
        v_int.push_back(100);//在容器尾部添加元素
        v_int.emplace_back(100);//在容器尾部添加元素
/*
        ·推荐使用emplace_back();效率更高
        ·push_back会调用拷贝构造函数,emplace_back直接在尾部添加
*/
        v_int.pop_back();    //删除最后一个元素
        v_int.size();        //返回容器大小(元素个数)
        v_int.front();        //返回首元素
        v_int.back();        //返回尾元素

    vector容器遍历

        at(): v_int.at(index);
        数组下标:v_int[index];

    迭代器

        在容器中的作用类似于指针
        vector<int>::iterator it;//创建迭代器
        v_int.begin();    //返回首元素地址
        v_int.rbegin();    //返回尾元素地址
        v_int.end();    //返回尾元素的下一块区域的地址
        v_int.rend();    //返回首元素的前一块区域的地址
        v_int.insert(it,100);//在迭代器指向的空间插入元素
/*
        ·插入操作后原有的迭代器均不能继续使用
*/
        v_int.erase(it);//删除迭代器指向的空间的元素
/*
        ·erase方法删除数据不影响迭代器
*/

    容器的大小、容量

        v_int.reserve(10);//改变容器的容量
/*
        ·容量大小会随容器的大小(元素个数)增加而扩容
*/
        v_int.capacity();//打印容器的容量
        swap(v1,v2);    //交换两个容器
        v1.swap(v2);    //交换两个容器
/*
        vector<int>(v1).swap(v1);
        ·巧用swap方法释放多余的容量
        ·创建新容器拷贝旧容器
        ·新容器和旧容器交换
*/


    vector的排序

        algoriithm库下sort方法


    list容器(双向链表)

        将数据进行链式存储
        迭代器只能前移或者后移
        list插入数据迭代器不受影响

    list容器的反转和排序

        l1.reverse();//反转链表
        l1.sort();    //排序


    map、multimap容器(键值对容器)

        map容器的所有元素都是pair对组
        不允许有重复的键值 ,multimap可以有重复的键值
        只能通过insert插入对象
        插入的数据自动排序
/*
        map容器在底层是由二叉树实现的
        map容器是高性能的
*/

        m.erase(key);//通过键值来删除数据
        //通过迭代器和find函数来查找数据
        m.count(key);//multimap统计重复的key的元素个数

    pair对组容器

        用来存储成对出现的数据

        创建:pair<int, string> p1(1001,"abc");

        第一个元素为键(查找),第二个元素为值(存储)

    其他容器

        array(数组容器)
        deque(双向数组)
        stack(栈容器)
        queue(队列容器)
        set     (自动排序容器)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值