STL库学习20240124(pair,queue,list,string)

算法组-黄俊瑜 2024-01-24 22:39:55

先补充一下迭代器相关:

迭代器本质上是一种对象,它提供了对容器中元素的访问和遍历的能力。迭代器可以看作是一个指针,它指向容器中的某个元素,并提供了一些操作符(如*++--等)来实现对容器元素的访问和操作。

在C++中通过以下方式来创建迭代器:

  1. 使用容器的成员函数 begin()end():大多数STL容器提供了 begin()end() 成员函数,它们分别返回指向容器第一个元素和最后一个元素之后位置的迭代器。例如,在vector容器中,可以使用 vector<int>::iterator it = vec.begin(); 来创建一个指向 vec 容器第一个元素的迭代器。

  2. 使用容器构造函数:有些容器的构造函数接受迭代器作为参数,用于指定容器的初始元素范围。例如,可以使用 vector<int> vec(it_begin, it_end); 来创建一个包含从 it_beginit_end 范围内元素的 vector 容器。

  3. 使用算法函数返回的迭代器:STL算法函数(如 find()sort() 等)通常返回一个迭代器,用于指示操作结果的位置。可以将这些迭代器用于后续的操作。

需要注意的是,因为不同容器的性质不同,用于访问这些容器的迭代器也有所不同。例如,vectorarray 使用的是随机访问迭代器,而 listset 使用的是双向迭代器。

 

pair

pair是一个相当特殊的容器,它只允许存储两个元素,这两个元素的类型可以是不同的。

头文件:

#include<utility>

以这一定义为例子:

pair<int, double> p(1, 3.14);

int,double代表将存储两个元素,类型分别是整形和浮点型,内容分别是1和3.14.

也可以不在定义时就设置容器内容,而是在定义后再设置:

p = {1,3.14};

p = make_pair(1,3.14);

访问方式:

 

Queue

即队列,简而言之就是先进先出。

//头文件

#include<queue>

//定义初始化

queue<int> q;

队列的元素添加只能添加至队尾,元素删除只能从队首开始,这一点从它支持的各种方法上也可以看出:

 String

即字符串,与char相比它兼容更多操作回忆起了在隔壁捣鼓字符串的痛苦回忆

定义:

特性:

 list

 双向链表,操作限制于首尾元素,定义和方法如下:

  //1.定义和初始化

    list<int> lst1;          //创建空list

    list<int> lst2(3);       //创建含有三个元素的list

    list<int> lst3(3,2); //创建含有三个元素的list

    list<int> lst4(lst2);    //使用lst2初始化lst4

    list<int> lst5(lst2.begin(),lst2.end());  //同lst4

 

    //2.常用操作方法

    lst1.assign(lst2.begin(),lst2.end());  //分配值

    lst1.push_back(10);                    //添加值

    lst1.pop_back();                   //删除末尾值

    lst1.begin();                      //返回首值的迭代器

    lst1.end();                            //返回尾值的迭代器

    lst1.clear();                      //清空值

    bool isEmpty1 = lst1.empty();          //判断为空

    lst1.erase(lst1.begin(),lst1.end());                        //删除元素

    lst1.front();                      //返回第一个元素的引用

    lst1.back();                       //返回最后一个元素的引用

    lst1.insert(lst1.begin(),3,2);         //从指定位置插入个

    lst1.rbegin();                         //返回第一个元素的前向指针

    lst1.remove(2);                        //相同的元素全部删除

    lst1.reverse();                        //反转

    lst1.size();                       //含有元素个数

    lst1.sort();                       //排序

    lst1.unique();                         //删除相邻重复元素

 

...全文
37 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

342

社区成员

发帖
与我相关
我的任务
社区描述
一个供Leaders学习交流的地方
c++javapython 技术论坛(原bbs) 广东省·深圳市
社区管理员
  • 叫我胡萝北
  • CheungZzzc
  • szu_gexu
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧