c++标准模板库STL【快速查找】【最全】【常用】【语法】

c标准模板库STL快速查找最全常用语法
        vector- 变长数组
        set-内部自动有序且不含重复元素
        string-字符串处理
        map-键值对
        queue-队列
        priority_queue-优先队列
        stack-栈
        pair

vector- 变长数组

添加头文件:

#include <vector>

定义vector:

vector<typename> name; //typename可以是任何基本类型,也可以是STL容器
vector<vector<typename> > name; //c++11之前会将>>视为移位操作,所以要加空格> >

定义vector数组:

vector<typename> Arrayname[arraySize]; //与vector<vector<typename> >不同的是一维已经固定长度为arraySize

访问:

通过下标访问name[index]
    通过迭代器访问
    迭代器类似指针,定义为vector<typename>::iterator it = name.begin()
    得到 it 后通过 *it 来访问vector里的元素, *(it + i) 来访问第i个元素
    循环可以这样写:

for(vector<typename>::iterator it = name.begin(); it != name.end(); it++){}

常用函数:

push_back() 尾插,时间复杂度为O(1)

pop_back() 尾删,时间复杂度为O(1)
size() 长度,返回unsigned类型,时间复杂度为O(1)
clear() 清空,时间复杂度为O(n)
insert(it, x) 向迭代器it处插入元素x,时间复杂度为O(n)
erase()

删除单个元素 erase(it)
    删除一个区间[first, last)的元素erase(first, last) //first与last都是迭代器
    时间复杂度均为O(n)

set-内部自动有序且不含重复元素

添加头文件:

#include <set>

定义set

set<typename> name;

1

访问
只能通过迭代器访问:

set<typename>::iterator it;

1

得到it之后按*it来访问set里的元素
由于除开vector和string之外的STL容器都不支持*(it + i)的访问方式,因此只能采用下列方式枚举:

for(set<typename>::iterator it = name.begin(); it != name.end(); it++){}

1

常用函数

insert() 时间复杂度O(logN)

,因为底层使用红黑树来实现
find(value) 返回对应值为value的迭代器,时间复杂度为O(logN)
erase()

删除单个元素
        name.erase(it) 时间复杂度为O(1)

name.erase(value) 时间复杂度为O(logN)

删除一个区间[first, last)内的元素 name.erase(first, last), 时间复杂度为O(last−first)

size() 时间复杂度为O(1)
clear() 清空 O(N)

string-字符串处理

添加头文件

#include <string>

1

定义

string str;
string str = "abcd"; //定义的同时初始化

1
    2

访问
读入输出只能用cin和cout
或者用c_str()将string类型转成字符数组,再用printf()输出

string str = "abcd";
printf("\n", str.c_str());

1
    2

通过下标访问
    通过迭代器访问
    与vector一样可以通过*(it + i)的方式访问

常用函数

+= 拼接赋值
    ==、!=、<、<=、>、>=比较大小,字典序
    length()/size() 返回string长度,O(1)

insert() O(N)

insert(pos, string) 在pos位置插入string
    insert(it, it2, it3) it为原字符串的欲插入位置,it2和it3为待插入字符串的首尾迭代器,[it2, it3)

erase()

erase(it) 删除单个元素
    erase(first, last) 删除区间[first, last)的所有元素
    erase(pos, length), 删除pos处开始的length长度的字符个数

clear() O(1)

substr(pos, len) 返回从pos号位开始,长度为len的子串,时间复杂度为O(len)
string::npos 是一个常数,用以find函数失配时的返回值,即等于-1也等于4294967295(unsigned_int类型最大值)
find()

find(str2) 找子串第一次出现的位置,若不是,返回string::npos
    find(str2, pos), 从str的pos号位开始匹配str2
    时间复杂度为O(mn)

,其中n和m分别是str和str2的长度

replace() O(str.length())

replace(pos, len, str2) 把str从pos号位开始,长度为len的子串替换为str2
        replace(it1, it2, str2) 把str的迭代器[it1, it2)范围的子串替换为str2

map-键值对

添加头文件

#include <map>

1

定义

map<typename1, typename2> mp;

1

访问

通过下标访问,例如mp[‘a’]
    通过迭代器访问

- map<typename1, typename2>::iterator it;
 - for(map<typename1, typename2>::iterator it = mp.begin(); it != mp.end(); it++){
    //it->first; 访问键
    //it->second; 访问值
}

1
    2
    3
    4
    5

常用函数

find(key) 返回key的映射的迭代器, 时间复杂度为O(logN)

, 底层红黑树实现

erase()

erase(it) O(1)

erase(key) O(logN)
erase(first, last) 删除[first, last)区间元素,O(last−first)

size() O(1)

clear() O(N)

queue-队列

添加头文件

#include <queue>

1

定义

queue<typename> name;

1

访问

front() 访问队首
    back() 访问队尾

常用函数

push() O(1)

front(),back() O(1)
pop() O(1)
队首出队
empty() 检测queue是否为空,返回true为空,O(1)
size() O(1)

priority_queue-优先队列

用堆来实现,每次插入元素根据元素的优先级向上调整到堆顶
添加头文件

#include <queue>

1

定义

priority_queue< typename > name;

1

访问
只能通过top()函数来访问队首元素(堆顶元素),也就是优先级最高的元素

常用函数

push() 往堆底插入元素,向上调整,所以时间复杂度为O(logN)

top() O(1)
pop() 令队首元素出队,将队尾元素复制到队首,并向下调整,删除队尾,所以时间复杂度为O(logN)
empty() 检测是否为空,O(1)
size() O(1)

优先级设置

基本数据类型

priority_queue<int> q;
priority_queue<int, vector<int>, less<int> > q;//vector<int>填写的是来承载底层heap的容器,less<int>是对第一个参数的比较类,less<int>表示数字大的优先级越大
priority_queue<int, vector<int>, greater<int> > q;//数字小的优先级大

1
    2
    3

结构体

struct student{
    //学生成绩
    string s_id;
    int s_grade;
    friend bool operator < (student s1, student s2){
        //重载< 重载>号会编译错误
        return s1.s_grade < s2.s_grade;//s_grade大的优先级高
        //若s_grade小的优先级高,则改为return s1.s_grade > s2.s_grade;
    }
}
priority_queue<student> q;

1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

将重载<放到student结构体外

struct cmp{
    bool operator (const student &s1, const student &s2){
        //使用引用避免复制,提高效率
        return s1.s_grade > s2.s_grade;
    }
}
priority_queue<student, vector<student>, cmp> q;

1
    2
    3
    4
    5
    6
    7

stack-栈

添加头文件

#include <stack>

1

定义

stack<typename > name;

1

访问
使用top()来访问栈顶元素

常用函数

push() O(1)

top() O(1)
pop() O(1)
empty() O(1)
size() O(1)

pair

添加头文件

#include <utility>

1

定义

pair<typename1, typename2> p;
pair<string, int> p("jetlee", 18); //定义的同时初始化
//定义临时pair的两种方式
p = pair<string, int>("jetlee", 18);
p = make_pair("jetlee", 18);

访问
pair中只有两个元素,分别用first和second来访问

常用函数

比较操作数:==、!=、<、<=、>、>=;比较规则是先比较first,first相同时再比较second
---------------------  
作者:阶艺勿听  
来源:CSDN  
原文:https://blog.csdn.net/sinat_25721683/article/details/79073336  
版权声明:本文为博主原创文章,转载请附上博文链接!

c++标准模板库STL【快速查找】【最全】【常用】【语法】相关推荐

  1. C++ 标准模板库(STL)

    C++ 标准模板库(STL) C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列) ...

  2. C++ ——模板 标准模板库STL

    C++ 知识基础 流操作符 类 & 基础 初始化和重载 类 & 高级 继承和多态 模板 & 标准模板库STL 目录 C++ 一.模板 1.函数模板 2.类模板 二.标准模板库S ...

  3. C++ 标准模板库 STL 概述

    泛型程序设计 C++ 的特点: ​ C++ 的核心优势之一就是便于软件重用,而软件的重用在 C++ 中主要体现在以下两个方面: 面向对象的思想:继承.多态和标准类库 泛型程序设计的思想:模板机制和标准 ...

  4. 13 标准模板库STL【C++】

    13 标准模板库STL 13- 判断题 单选题 填空题 程序填空题 函数题 7-1 .查找电话号码 7-2 姓名排序 7-3 Score Processing 13+ 编程题 7-1 查找成绩并折算后 ...

  5. 第十章 标准模板库STL

    第十章 标准模板库STL 因为是在复习时重写的,无法在PTA上验证,编程题格式可能有误. 判断题 1.可以通过下标随机访问向量vector中的元素.(T) 2.当向量对象的内存用完之后,就会产生越界错 ...

  6. 标准模板库STL(Standard Template Library)

    标准模板库STL(Standard Template Library)指南 /*刘振飞liuzf@pku.org.cn 1999-10-20*/ / *版权所有 (C) 1999-2004 刘振飞li ...

  7. C++中标准模板库STL基本概念

    0. 前言 C++语言的一大优势就是便于软件的重用,而重用体现在两方面: 1. 面向对象思想:继承和多态,标准类库 2. 泛程序设计(Generic Programming)思想:模板机制,标准模板库 ...

  8. 蓝桥杯算法竞赛系列第0章——蓝桥必考点及标准模板库STL(上)(万字博文,建议抱走)

    欢迎来到:遇见蓝桥遇见你,不负代码不负卿! 目录 ​ 一.蓝桥必考点剖析 二.什么是STL 三.vector的常见用法详解 1.vector的定义 2.vector容器内元素的访问 (1).通过下标访 ...

  9. c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解

    c++ 标准模板库 stl 顺序容器 容器 顺序性 重复性 支持迭代器 vector 动态数组 无序 可重复 随机访问迭代器 deque 双向队列 无序 可重复 随机访问迭代器 list 双向链表 无 ...

最新文章

  1. A - Supercentral Point CodeForces - 165A
  2. Please ensure JDK installation is valid and compatible with the current OS
  3. 解决 Visual Studio 2019 无法打开wpf设计器问题
  4. 某8位微型计算机地址总线为16位,微机原理试题和答案
  5. spark之2:原理介绍
  6. Tensorflow Timeline介绍及简单使用
  7. iOS底层探索之类的结构(中):bits
  8. 解决python使用images2gif模块时候报错:Type error Argument 1 must be string or buffer not none
  9. JS 校验车牌号码(全)
  10. 读《我的成功为什么可以复制》——唐骏
  11. 慢慢来,一切都来得及 2012-01-16 15:02:22
  12. [转]144P /240P/360P/480P/720P/1080P分辨率的差别
  13. ipv6 dns修改方法
  14. Day 05 Dict字典
  15. 【数据库MySQL】2021最新官网下载及查看MySQL版本步骤教程
  16. 渗透测试-完整渗透流程(一.信息收集)
  17. (MFC)广州大学大一下课程设计实验报告-学生成绩管理系统
  18. linux中文入门,Ylmf OS 4.0 - 最适合国人使用和入门学习的中文Linux操作系统 (免费开源)...
  19. 由于不可抗力,这是我今年最后一篇博文了
  20. Barracuda【高斯消元】【暴力】

热门文章

  1. boost::function_types::is_member_pointer用法的测试程序
  2. boost::coroutine模块实现不对称echo的测试程序
  3. boost::container实现前向迭代的测试程序
  4. Boost:以协程的方式实现重构echo服务器的实例
  5. DCMTK:列出dicom文件的内容
  6. VTK:Utilities之TimerLog
  7. VTK:Shaders之ColorByNormal
  8. VTK:Rendering之SpecularSpheres
  9. OpenCV图像形态 image morphology的实例(附完整代码)
  10. C++Poisso statistics泊松统计的实现算法(附完整源码)