STL简单认识

C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构。

STL中六大组件:
1容器(Container),是一种数据结构,如list,vector,和deques ,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;
2
迭代器(Iterator),提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。
3算法(Algorithm),是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象。
4仿函数(Function object
5迭代适配器(Adaptor
6空间配制器(allocator

其中容器(管理某类对象的集合),迭代器(在对象集合上进行遍历),算法(处理集合内的元素)是三个主要组件。协作关系如下


容器

(1序列式容器,每个元素都有固定位置--取决于插入时机和地点,和元素值无关,vector、deque、list;

(2关联式容器,元素位置取决于特定的排序准则,和插入顺序无关,set、multiset、map、multimap;
Sets/Multisets
:内部的元素依据其值自动排序,Set内的相同数值的元素只能出现一次,Multisets内可包含多个数值相同的元素,内部由二叉树实现,便于查找;

 

下面是对vector容器的应用:

//1.定义和初始化  

vector<int> vec1;    //默认初始化,vec1为空  

vector<int> vec2(vec1);  //使用vec1初始化vec2  

    vector<int> vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2  

    vector<int> vec4(10);    //10个值为的元素  

    vector<int> vec5(10,4);  //10个值为的元素  

//2.常用操作方法  

    vec1.push_back(100);            //添加元素  

    int size = vec1.size();         //元素个数  

    bool isEmpty = vec1.empty();    //判断是否为空  

    cout<<vec1[0]<<endl;        //取得第一个元素  

    vec1.insert(vec1.end(),5,3);    //vec1.back位置插入个值为的元素  

    vec1.pop_back();              //删除末尾元素  

    vec1.erase(vec1.begin(),vec1.end());//删除之间的元素,其他元素前移  

    cout<<(vec1==vec2)?true:false;  //判断是否相等==、!=>=<=...  

    vector<int>::iterator iter = vec1.begin();    //获取迭代器首地址  

    vec1.clear();                 //清空元素  

迭代器(iterator):

1.可遍历STL容器内全部或部分元素的对象

2.指出容器中的一个特定位置

vector迭代器相关函数:

1.     begin()返回一个迭代器,指向第一个元素;

2.    end()返回一个迭代器,指向最后一个元素末尾;

3.    rbegin()返回一个逆向迭代器,指向逆向遍历的第一个元素;

4.    rend()返回一个逆向迭代器,指向逆向遍历的最后一个元素;

迭代器持续有效,除非发生以下两种情况:

1.删除或插入元素

2.容量变化而引起内存重新分配

STL算法库包含了许多好用的函数,可以直接调用,主要头文件有

<algorithm>,<numeric>和<functional>

学习小结:熟悉了STL之后,许多代码可以被大大的化简,利用vector可以高效随机访问、节省空间,利用map我们实现了数组下标的取用不只局限于整形数据。并且STL中包含了许多好用的函数,要让STL成为自己的一项基本技能。

猜你喜欢

转载自blog.csdn.net/weixin_40630836/article/details/80468982