在我刚走上算法修炼这条路时,走了不少的弯路,那时候因为不知道C++ STL库的存在,为了满足题目对运行时间的要求,只能使用C语言,而C语言最大的弊端是很多东西都要自己去实现,所以在做算法题时,我常常会感觉到很累,一度想要放弃。

但自从用上了STL库以后,情况改善了许多,STL即标准模板库,它提供了多种容器和算法来满足编程者的要求,本篇文章不做教程,因为好的教程太多了,这里推荐C语言中文网:http://c.biancheng.net/cplus/80/,花上两个小时就可以完全学会!

关于vector的一些简单总结:

适用场景:

vector:在元素个数不确定时做变长数组;再输出元素个数不确定而又需要每个元素之间打印空格时,做暂存容器!

vector数组:存储树,图!

头文件:

#include<vector>

定义:

vector<typename> name;

例如:

vector<int> name;

vector<double> name;

vector<node> name;//node为结构体的类型

vector<vector<int> > name;   // >>之间要加空客

访问:

迭代器定义方式:

vector<type>:: iterator it;

类似于指针,注意左闭右开!

常用函数:

push_back():末尾添加元素

pop_back():删除末尾元素

size():返回vector长度

clear():清空vector里面的所有元素

insert(it,x):用来向任意的迭代器it处插入一个元素x。

erase():删除单个元素,或某个区间的所有元素。

关于set的一些简单总结:

适用场景:

set:需要去重但是不方便直接开数组的情况可使用set,set可实现自动去重并按升序排序。

set中元素唯一,如果需要处理不唯一的情况,则需要使用multiset

头文件:

#include<set>

定义:

与vector相同,不再赘述。

访问:

set只能通过迭代器访问:set<typename>::iterator it;

除vector和string之外的STL容器都不支持*(it+i)的访问方式,因此set的枚举方式唯一:

#include<stdio.h>
#include<set>using namespace std;
int main()
{set<int> st;st.insert(1);st.insert(3);st.insert(5);st.insert(7);st.insert(1);//不支持 it < st.end() 的写法for(set<int>::iterator it=st.begin(); it!=st.end(); it++){printf("%d",*it);}return 0;} 

常用函数:

insert(x) : 将x插入set容器中。

find(value) : 返回set中对应值为value的迭代器。

erase() :  删除单个元素,或某个区间的所有元素。

size() :返回set内元素的个数。

clear() : 清空set中的所有元素。

关于string的一些简单总结:

适用场景:替代字符数组char str[]来存放字符串,封装了一些常用功能,方便操作!

头文件:

#include <string>

定义:

string str;

访问:

#include<stdio.h>
#include<string>
using namespace std;
int main()
{string str="asdfg";for(int i=0;i<str.length();i++){printf("%c",str[i]);}cin>>str;//输入输出只能用cin cout cout<<str;return 0;} 

也可以用迭代器访问,用法同set,此处不赘述!

常用函数:

  1. 字符串拼接:str3=str1+str2
  2. 比较操作:按字典序比较大小。
  3. length()/size():湖区存放的字符数
  4. insert():

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

  5. erase():删除某个字符或一段字符。

  6. clear():清空字符串!

  7. sub(pos,len)返回从pos号位开始、长度为len的子串。

  8. find(str2):当str2是str的子串时,返回其在str中第一次出现额位置;如果str2不是str的子串,返回string::npos。

  9. replace(pos,len,str2):把str从pos号位开始、长度为len的子串替换为str2。

关于map的一些简单总结:

适用场景:

map翻译为映射,也是STL容器。map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)。

例:可建立字符串到数字的映射、字符串到字符串的映射。

头文件:

#include<map>

定义:

map<typename1,typename2>mp;

typename1为映射前的类型(键key),typename2为映射后的类型(值value).

访问:

1.下标访问:例value=map[key]

2.迭代器访问:map<typename1,typename2>iterator it;

常用函数:

1.find(key):返回键为key的映射的迭代器.

2.erase():删除某个元素或者某个区间的所有的元素。

3.size():返回map中映射的对数。

4.clear():清空map中的所有元素

关于queue的一些简单总结:

适用场景:建立一种先进先出的数据结构。可用于广度优先搜索时(BFS)

头文件:

#include<queue>

定义:

queue<typename> name;

访问:

front():访问队首元素。

back():访问队尾元素。

常用函数:

  1. push(x):将x入队。
  2. front(),back():分别获得队首元素和队尾元素。
  3. pop():令队首元素出队。
  4. empty():检测queue是否为空,是则返回true,否则返回false。
  5. size():返回queue内的元素的个数。

关于stack的一些简单总结:

适用场景:

实现一种先入后出的数据结构,可用来模拟实现一些递归。

头文件:

#include<stack>

定义:

stack<typename> name;

常用函数:

  1. push(x):将x入栈。
  2. top():获得栈顶元素。
  3. pop():用以弹出栈顶元素。
  4. empty():判断是否为空。
  5. size():返回栈内元素个数。

C++ STL库学习——容器相关推荐

  1. c++ stl库的基础学习

    stl库学习 学了之后发现,太棒了,终于可以像python一样,不用那么麻烦了 这里面的东西其实都是可以类比到python那里面的 比如vector就是list,map就是dict,set就是会知道排 ...

  2. Qt框架与STL库之间的巅峰对决:差异、优缺点及适用场景

    Qt框架与STL库之间的巅峰对决:差异.优缺点及适用场景 引言 对比的重要性 Qt框架与STL库简介 博客内容概览 Qt框架基础 Qt框架的特点与组成 Qt的信号槽机制 Qt容器类简介 数据结构的对比 ...

  3. C++的STL标准库学习(queue)队列(第四篇)

    queue容器基本概念 Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素.  也就是说输入的数据要 ...

  4. C++的STL标准库学习(stack)栈

    stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口,形式如图所示.stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何其他方法 ...

  5. C++STL标准库学习总结/索引/学习建议

    前言: 如果刚刚开始学习STL标准库,不知道从哪里入手学习的话,建议去中国大学mooc平台,先学习北京大学郭炜老师的<程序设计与算法(一)C语言程序设计>(https://www.icou ...

  6. 【C++ STL学习笔记】C++ STL序列式容器(array,vector,deque,list)

    文章目录 C++ STL容器是什么? 迭代器是什么,C++ STL迭代器(iterator)用法详解 迭代器类别 迭代器的定义方式 C++序列式容器(STL序列式容器)是什么 容器中常见的函数成员 C ...

  7. C++提高编程----STL标准模板库-常用容器

    STL标准模板库(Standard Template Library)-常用容器 C++的,面向对象和泛型编程,目的就是提高代码的复用性:为了建立数据结构和算法的统一标准,诞生了STL 一.STL初识 ...

  8. STL库容器vector at函数

    STL库容器vector at函数 v.at(n)返回v指定位置n的元素.at函数比[]运算符更加安全, 因为它不会让你去访问到越界的元素,一旦越界将会在运行时中止程序并抛出一个异常std::out_ ...

  9. 【C++】 STL库的stack容器

    STL库的stack容器 1.构造函数 2.增 2.1 push() 2.2 emplace() 两者区别 3.删 pop() 4.改 4.1 swap()交换 5.查 top() 6.判空 empt ...

  10. C++的STL库,vector sort排序时间复杂度 及常见容器比较

    http://www.cnblogs.com/sthv/p/5511921.html http://www.169it.com/article/3215620760.html http://www.c ...

最新文章

  1. 洛谷 3953 NOIP2017提高组Day1 T3 逛公园
  2. 嘉立创显示板子没有发现外型数据
  3. UI控件篇——UIPageControl及其自定义
  4. 【最短路径问题笔记】Floyd算法求多源最短路径问题
  5. Helloworld之Spring依赖注入/控制反转(DI/IoC)版
  6. 实战篇:Linux 安装 Oracle 11GR2 数据库保姆级教程
  7. 华硕幻16、酷睿12代、windows11、vmware折腾总结
  8. WIN7操作系统IE11的离线安装(有时间总结下)
  9. html做彩色方格,超级炫酷,美图秀秀制作超漂亮彩色格子字图文教程
  10. 小程序员的不完整大学回忆3
  11. phpmyadmin 下载、安装、配置
  12. 电脑自动出现html文件,当前页面发生脚本错误 电脑总出现当前页面脚本错误怎么办?...
  13. python中的newline_python open函数newline用法
  14. 成都宽带100兆360元一年
  15. 会做饭,擅长烹饪,会给你的工作生活带来怎样的不同?
  16. 4. 机器人正运动学---理解变换矩阵
  17. 计算机仿真的主要目的,数控加工仿真的主要目的是什么?
  18. [前端笔记006]CSS布局之字体 -- font
  19. matlab中1代表什么颜色,利用matlab如何在一个图中表示不同颜色得点
  20. java微信公众平台开发接口_微信公众平台API的Java通讯实现

热门文章

  1. AXI Memory-Mapped SRIO收发控制器
  2. 使用TestNG-abbot测试GUI
  3. 微信小程序:简单实现地图导航功能实现
  4. android开发之路-----------转自任玉刚大神
  5. python手写数字识别实验报告_ANN MNIST手写数字识别总结
  6. 相机标定+极线矫正+elas生成视差图
  7. maven 命令下载依赖包
  8. 最新2019年dnf辅助制作视频教程
  9. Masscan教程和入门手册
  10. 用两个栈实现一个队列