zoukankan      html  css  js  c++  java
  • STL与基本数据结构

    这是我第一次用Markdown来写东西,先纪念一下~

    这篇博客就先把常用的STL容器记一下,方便以后查阅。

    Vector

    vector其实就是可变长度的数组,特点就是随机访问的效率高O(1),但删除和中间插入是O(n)

    定义

    例子 说明
    vector <数据类型> a; 最基本的定义方式,a为空
    vector <数据类型> b(a); 用a来初始化b
    vector <数据类型> c(num1,num2); 使容器内有num1个值为num2的元素

    常用操作

    功能 例子 说明
    赋值 a.push_back(100); 在尾部添加一个元素
    元素个数 int size = a.size(); 返回元素个数
    判断是否为空 a.empty() 如果为空,返回真;否则返回假
    打印 cout<<a[0] vector支持像数组一样输出
    中间插入 a.insert(a.begin()+i,k) 向第 i 个元素前加入值为k的元素
    尾部插入 a.insert(a.end(),num1,num2) 向尾部插入 num1 个值为 num2 的元素
    删除尾部 a.pop_back() 删除最后一个元素
    删除区间 a.erase(a.begin()+i,a.begin()+k) 删除区间 [ i , j - 1 ] 的元素
    删除元素 a.erase(a.begin()+i) 删除第 i+1 个元素
    调整大小 a.resize(n) 调整a的大小到n
    清空 a.clear() 清空
    反转 reverse(a.begin(),a.end()) 反转整个数组
    排序 sort(a.begin(),a.end()) 从小到大排序

    list —— 链表

    特点:随机访问效率低,插入删除效率高。和vector算是相反的。

    函数基本同vector

    Stack —— 栈

    栈的特点:“先进后出”

    定义与操作

    写在一起是因为栈的操作的确少

    功能 例子
    定义一个栈 stack <数据类型> a
    向栈中压入元素 a.push(item)
    返回栈顶的元素 a.top()
    弹出栈顶的元素 a.pop()
    返回栈中的元素个数 a.size()
    检查栈是否为空;空则返回true a.empty()

    queue —— 队列

    队列的特点:“先进先出”

    定义与操作

    和栈一样操作很少

    功能 函数
    定义一个队列 queue<数据类型> q
    一个元素进队 q.push(item)
    返回队首的元素 q.front()
    删除队首的元素 q.pop()
    返回队尾的元素 q.back()
    返回队列中元素个数 q.size()
    检查队列是否为空 q.size()

    优先队列 —— priority_ queue

    操作基本等同于队列,不过它是队列与排序的结合。它总是处在优先级从高到底的排好序的状态。

    也就是说,它的队首元素永远是优先级最高的元素。

    在不自定义优先级的状态下,队首元素是队列中最大的元素。

    set —— 集合

    特点:自动去重,自动排序,查找速度快(二叉树实现O(logn))

    功能 函数
    定义一个set set<数据类型> s
    插入一个元素 s.insert(item)
    删除一个元素 s.erase(item)
    清空set s.clear()
    判断是否为空 s.empty()
    返回元素个数 s.size()
    查找一个元素(返回迭代器 )
    若未找到返回s.end()
    s.find(x)
    查找不小于k的第一个元素
    (返回迭代器)
    s.lower_bound(k)
    查找大于k的第一个元素
    (同上)
    s.upper_bound(k)

    multiset

    基本同set,但不同的是它不去重,可以统计一个元素的次数

    功能 例子
    查找k出现了多少次 int a=s.count()

    set里也可以使用,不过返回值就只有0和1两种

    map

    特点:实现了一种映射,可以从一个值找到另一个值,比如给定一个学生的姓名,求其学号这样的。

    和set一样查找速度很快,也去重,自动按键值排序。

    功能 例子
    定义map map<键值 ,对应的值> m
    赋值 m["tom"]=15
    查找 int tom_age=m["tom"]
    查找(返回迭代器)
    未找到返回m.end()
    iter=m.find("tom")
    输出(迭代器) cout<<iter->first<<iter->second
    删除 m.erase("tom")
    删除(迭代器) m.erase(iter)

    没写的很多操作都是同set。

  • 相关阅读:
    Java18(泛型,反射,内省)
    Java17(线程池、Runnable和Callable、Lock、信号量、任务调度、Timer)
    Javaday16(守护线程,线程同步,线程通讯)
    面试题错题集04(异常)
    面试题错题集03(数组)
    面试题错题集02(面向对象)
    Javaday15(Queue,Collections工具类,多线程)
    Java中的内部接口
    ISO14229:2013 之 通过标志读数据ReadDataByIdentifier (0x22)
    Oracle数据库迁移至PostgreSQL数据库问题及解决
  • 原文地址:https://www.cnblogs.com/Salty-Fish/p/12344865.html
Copyright © 2011-2022 走看看