• C++,STL


    一、STL

    一 、概念

        底层和各自的效率。

        vector:底层是数组,查询快,插入删除慢。

        list: 底层是双向链表,查询慢,插入删除快。

        都有长度,长度都可以变化,都使用对象调用size()得到,

        foreach遍历相同。

        获取迭代器的方式相同,迭代器前面加"*"都能取出元素。

        取到元素后都能修改。

        创建方式完全相同。

    二、vector

    1、创建vector

    vector、list、deque的创建是完全相同的。

    注:C5的取值范围是前闭后开[下标2,下标5)

    2、得到长度

    v.size(),默认长度为0。

    vector、list、deque对于size()是完全相同的

    3、foreach遍历vector

    去掉const修改值:

    vector变量

    vector、list、deque、set 对于foreach是完全相同的。

    4、迭代器

    (1)创建vector迭代器变量

        vector::iterator it;

    (2)得到指向首元素的迭代器

        vector::iterator it = myvector.begin();

    (3)得到指向最后元素的下一位

        vector::iterator it = myvector.end();

    (4)vector迭代器的运算, 都是类中的运算符重载的结果

        1、++、 -- 、 示例

        2、+整数、 -整数、

        3、*

        4、关系运算:<、>、>=、<=。

     (5)使用迭代器遍历元素

    5、获取元素的引用, 修饰元素

        得到元素的引用了就可以使用“=”修饰元素的值。

    (1)v.at(index) 等效于 v[index]

    (2)*it, it是迭代器

    封装:根据索引得到元素

    *(v.begin()+index)

    (3)v.back() 得到最后一个元素

    (4)v.front() 得到第一个元素

    6、加入与删除元素

        加入与删除都会改变容器的长度

    (1)尾部加入元素

    v.push_back(值)

    (2)迭代器指向的元素前插入元素

        v.insert(it, 值);

        封装:在索引元素前插入元素

        v.insert(v.begin+index, 值);

    (3)v.pop_back();删除最后一个元素

    (4)v.clear();删除所有元素

    (5)v.erase(it)删除迭代器指向的元素

        封装:删除索引处的元素

        v.erase(v.begin()+index);

    7、排序

        使用c函数sort可以进行排序,要求导入头文件

    sort(it1, it2, 排序规则函数)

    三、list

    1、创建list

    vector、list、deque的创建是完全相同的。

    2、得到长度

    v.size()

    vector、list、deque对于size()是完全相同的

    3、foreach遍历vector

    vector、list、deque、set 对于foreach是完全相同的。

    4、迭代器

    (1)创建list迭代器变量

    list::iterator it;

    (2)得到指向首元素的迭代器

    list::iterator it = c.begin();

    (3)得到指向最后元素的下一位。

    list::iterator it = c.end();

    (4)list迭代器的运算, 都是类中的运算符重载的结果

    1、++、 -- 、

    2、+整数、 -整数、 有异常,不能使用

    3、*

    4、关系运算, 有异常,不能使用

        (5)使用迭代器遍历元素

    5、获取元素的引用, 修改元素

    得到元素的引用了就可以使用“=”修饰元素的值。

    (1)c.at(index) 等效于c[index] 有异常

    (2)*it, it是迭代器

    (3) 根据索引获取元素的引用

    (4)c.back() 得到最后一个元素

    (5)c.front() 得到第一个元素

    6、加入与删除元素

    加入与删除都会改变容器的长度

    (1)尾部加入元素

            v.push_back(值)

    (2)最前插入元素

            c.push_front(值);

    (3)c.insert(it, 值) //把值插入迭代器it指向的元素前面

    (4)c.pop_back();删除最后一个元素

    (5)c.pop_front();删除第一个元素

    (6)v.clear();删除所有元素

    (7)v.erase(it)删除迭代器指向的元素

    7、排序

        使用c函数sort可以进行排序,要求导入头文件

            sort(it1, it2, 排序规则函数);

        示例:对所有元素排序

            sort(c.begin(); c.end(); 排序函数);

    四、deque

    1 底层是散列桶

    2 vector与list中使用的技术,deque都能使用。

    五、set/multset

        内部不能有重复的元素,当有重复元素时会合并,并且加入的元素会自动排序, 只能取出元素,不能修饰元素。

    1、创建set

    与vector的创建基本相同,仅仅是在创建的方式上少了两种方式即set c(2)和 set有错。

    2、得到长度

        c.size();

    3、foreach遍历vector

        vector、list、deque、set 对于foreach是完全相同的。

    4、迭代器

    (1)创建set迭代器变量

    set::iterator it;

    (2)得到指向首元素的迭代器

    set::iterator it = c.begin();

    (3)得到指向最后元素的下一位。

    set::iterator it = c.end();

    (4)根据值,找到迭代器。(list,vector,deque没有该函数)

    set::iterator it = c.find(v);

    (4) set迭代器的运算, 都是类中的运算符重载的结果

    1、++、 -- 、 示例

    2、+整数、 -整数、 有异常

    3、* 只能读,不能修改

    4、关系运算 有异常

    (5) 使用迭代器遍历元素

    5、获取元素的引用, 不能修改元素

        获取元素后,是只读的,不能改,并且只能以foreach或it的方式得到其中的元素。

    (1) c.at(index) 等效于c[index] 有异常

    (2)*it, it是迭代器, 只读的,不能改

    (3) 根据索引获取元素的引用, 实计这种方式无意义,本质上set中没有索引

    (4) c.back() 得到最后一个元素, 有异常

    (5) c.front() 得到第一个元素, 有异常

    6、加入与删除元素

    c.insert(值)

    c.clear();删除所有元素

    c.erase(值); 根据值删除元素

    c.erase(it); 根据迭代器删除元素

    7、加入自定义对象

            内部不能有重复的元素, 并且要自动排序,所以加入自定义类的对象就会失败,除非类满足条件:重写三个函数,函数要求是const函数, 即重写

    六、map/multmap

    1、创建

    2、加入

    (1)只有加入,没有前后或中间插入,因为它会根据键自动排序,并且,键是不可重复的。

    (2)"键"是有要求的,只能是char, short,int,long,float,double,string, 如果要把对象当作键,则要求与set中的对象的要求相同,一般不适用。

    (3)加入的方式有两种,功能相同, 因为键不可重复,所以加入时,如果其中已经有同名的键,则加入不会生效。但没有异常

    3、迭代器

    (1)创建迭代器变量

    (2)得到迭代器值

     (3) 迭代器的运算

    4、遍历

    5、获取

    it->first

    it->second

    6、修改 it->second=值

    只能改值,不能改键

    7、删除 m.erase(it),

    根据迭代器删除

    二、结构体

           C++结构体与C++中类的唯一区别是:

    1)、结构体权限修饰符默认为public。

    2)、类中的权限修饰符默认为private

  • 相关阅读:
    golang使用TLSv1.2证书
    IgH详解十四、igh添加总线链路状态监测功能
    mysql-MVCC
    Day20:C++STL算法篇(1/2)
    百度面试——机器学习
    ThinkPHP 接口开发过程
    [tensorboard] Windows下显示Linux文件
    力扣刷题笔记28——验证回文串/isalnum/逆序string
    Spring Boot中使用MongoDB完成数据存储
    GBase 8c数据库对象命名
  • 原文地址:https://blog.csdn.net/qq_52119661/article/details/133361318