首页 > 编程语言 > 详细

C++复习——STL容器操作

时间:2020-07-15 22:30:58      阅读:55      评论:0      收藏:0      [点我收藏+]

C++ STL为使用者提供了一系列类模版,使用者在使用时,可以根据自己需要的数据类型将STL中的类模版实例化为自己所需类型。因此这些操作被称为STL容器操作,以下主要整理了一些做题中常用到的操作。

从数据的存储方式和允许的操作上来看,容器分类主要有:

  • 序列式容器
  • 关联式容器
  • 无序关联容器
  • 容器适配器

技术分享图片

(图像来源于https://oi-wiki.org/lang/csl/container/)

关于迭代器

迭代器是STL中容器共同支持的操作,其功能类似于指针。虽然对于顺序容器,使用下标进行操作可能更为直观,但是很多STL中的函数都使用迭代器作为输入参数/返回参数,因此有必要针对常用STL函数了解迭代器使用。

以下是几个较为常用的STL函数,适当使用会便于写程序和计算:

  • sort(v.begin(), v.end(), cmp)
  • find(v.begin(), v.end(), value) 返回对应迭代器
  • binary_search(v.begin(), v.end(), value) 返回true/false
  • merge(v1.begin(), v1.end(), v2.begin(), v2.end()) 合并两个有序序列
  • lower_bound/upper_bound(v.begin(),v.end(),x) 必须有序序列,返回指向第一个大于等于/大于x的位置的迭代器。如果不存在这样的元素,则返回尾迭代器。原理是利用二分查找
  • unique()相邻元素的去重,返回去重后结尾的迭代器,原容器大小不变,应该是采用交换到最后的办法

序列式容器

vector

  • front()/back()返回元素引用
  • insert()插入元素,复杂度线性
  • push_back()/pop_back()

deque

  • push_back()/pop_back()
  • push_front()/pop_front()

list

双向链表

  • front()/back()返回引用
  • push_back()/pop_back()
  • push_front()/pop_front()
  • insert()
  • merge()有序合并

关联式/无序关联容器

set

  • insert()
  • count()统计出现个数
  • find()返回迭代器

map

  • 可以通过直接赋值或者pair插入,也可以通过一个{}表插入
  • find()返回迭代器(指向pair)

unordered_set

可能需要自定义hash函数:

struct my_hash {
  size_t operator()(int x) const { return x; }
};
  • count()

unordered_map

容器适配器

容器适配器不支持迭代器操作。

stack

  • top()
  • push()/pop()

queue

  • front()
  • push()/pop()

priority_queue

可能要自定义优先级,默认是大根堆less<int>

struct cmp
{
    bool operator()(Node a, Node b)
    {
            return a.x>b.x;
    }
};
  • priority_queue<int, vector<int>, greater<int> >p;修改成小根堆
  • top()
  • pop()删除第一个元素

 

C++复习——STL容器操作

原文:https://www.cnblogs.com/hesun/p/13238180.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!