STL的一些常见容器与算法

最近学习了黑马程序员的的STL课程,感觉讲的比较基础,适合入门,现总结一下

一、七个常见的容器

1、vector

2、string

3、deque

4、stack

5、List

6、set / multiset

7、map / multimap

其中map与set容器不允许有重复数据

二、基本操作

这几大容器用到的操作基本上差不多,如

1、push_back(),尾插 ; push_front(),头插

2、pop_back,尾删 ; pop_front(),尾插

3、insert(),插入

4、erase(),删除

5、clear(),清空

6、capacity(),获取容器容量

7、size(),获取容器大小

8、swap()交换两容器

9、[],利用[]进行数据存储,只限于随机访存容器 ; at(),利用at()进行数据存取,只限于随机访存类型的容器

10、find(),查找并返回迭代器

11、reverse(),容器逆置

12、begin(),第一个成员的迭代器;end(),最后一个成员的迭代器

13、assign(),容器赋值的常用操作

14、empty(),判断容器是否为空

15、resize(),重新指定容器大小

16、count(),统计value出现的次数

三、根据map,我们又学了 pair<,>对组

我们在使用map容器的Insert操作时,会返回pair<iterator,bool>对组,根据第二个参数我们可以判断是否存在重复数据,如果存在,则插入失败.

 

四、set与map容器创建的时候默认顺序是升序,我我们可以在添加数据前改变他们的排序顺序

利用仿函数,如:

class comparePerson
{
public:
    bool operator()(const Person&p1,const Person&p2) //指定为降序//
    {
        return p1.m_Age > p2.m_Age;
    }
};
void SortMy()
{//指定排序顺序//利用仿函数//


    set<Person,comparePerson>s;
    Person p1("刘备",24);
    Person p2("关羽",28);
    Person p3("张飞",25);
    Person p4("赵云",21);
    
    s.insert(p1);
    s.insert(p2);
    s.insert(p3);
    s.insert(p4);

    for(auto it= s.begin(); it != s.end();it++)
    {
        cout<<"姓名: "<<it->m_Name<<"  年龄:"<<it->m_Age<<endl;
    }

}

五、谓词

1、一元谓词  operator 接受一个参数,就叫做一元谓词

2、二元谓词   operator 接受二个参数,就叫做二元谓词

六、内建函数对象

使用STL自己内部的访函数

有以下等:

1、equal_to //等于
2、not_equal_to //不等于/
3、greater //大于//
4、greater_equal//大于等于
5、less/ /小于
6、less_equal //小于等于//

//逻辑仿函数//
1、logical_and //逻辑与
2、logical_or //逻辑或
3、logical_not //逻辑非

#include <functional> //内建函数的使用需要加这个头文件//

 

七、STL常用算法

1、for_each        //用于容器的遍历  

2、transform      //用于容器的搬运

3、find         //用于查找指定元素并返回迭代器

4、find_if        //按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置,比find更灵活

5、adjacent_find     // 查找相邻重复的元素

6、binary_search    //二分查找指定元素,因此需要容器里的元素有序

7、count        //统计元素出现的次数

8、count_if

9、sort         //排序,可以使用仿函数或回调函数更改其排序顺序

10、random_shuffle    //洗牌,打乱顺序,顺序依赖于随即数种子

11、merge        //合并两个容器的函数,将两个有序的容器合并成一个有序的容器

12、reverse        //反转容器内的元素

13、copy        //将容器内指定范围的元素拷贝到另一容器中

14、replace        //将容器内指定范围的 元素替换为新元素

15、replace_if

16、swap        //交换容器的元素

17、accumulate      //小型算法 计算区间内元素的累计和//  需要包含#include <numeric>头文件//

18、fill          //填充指定区间的元素  //需要包含#include <numeric>头文件//

19、set_intersection    //求两个容器的交集//要求这两个容器是有序的//

20、set_union       //求两容器的并集//要求两容器有序//

21、set_difference()    //求俩容器的差集//要求有序//

#include <algorithm>    //不要忘记加这个头文件//

八、课程中还提到了匿名变量,匿名函数,swap收缩内存等等,我会在其他文章中进行讨论

 

posted @ 2022-01-11 21:58  TLSN  阅读(133)  评论(0)    收藏  举报