vector:相当于一个不定长数组。

vector的扩充机制是按照现在容量的一倍进行增长,每次增长是重新申请一块更大的心内存,并把现在容器中的元素逐个复制过去,然后销毁旧的内攒
1.头文件:
#include<vector>
2.定义vector对象:
vector<int> a; //创建一个空的容器
vector<int> b(10,1);//创建一个初始10个元素,每个元素为1的数组
vector<int> c(b.begin()+5,b.end());//选取从b的第五个元素开始到结束的元素创建一个新的容器
vector<int> d(b);//创建一个和b一样的容器
vector<int> e(10);//创建一个有10个元素的容器
3.基本操作函数
vector<int>::iterator it=b.begin();//创建一个vector<int>的迭代器
c.begin();-------------------返回容器c的起始位置的迭代器
c.end():---------------------返回容器c的最后位置的迭代器
c.push_back(t);--------------向数组最后插入元素
c.pop_back(t);---------------删除数组最后一个元素
b.at(3);---------------------返回编号为3的数据
b.front();-------------------返回数组的第一个元素的值
b.back();--------------------返回数组的最后一个元素的值
b.insert(it+i,t)-------------在第i+1个元素前插入一个元素
b.assign(a.begin(),a.end())--将容器a的值赋值给容器b
b.erase(b.begin()+5);--------删除第6个元素
b.erase(it+1,it+4);----------删除第2个元素到第五个元素
b.size();--------------------返回容器大小
b.swap(d);-------------------将b和d交换数据
b.clear();-------------------清空当前的vector

set:就是数学上的集合——每个元素最多出现一次

1.头文件
#include <set>
2.定义set对象:
set<int> a;//创建一个空的set容器
set<int> b(a.begin(),a.end());//创建一个从a.begin()到a.end()的容器,可以定义迭代器进行移动位置
set<int> c(a);//创建一个和a一样的容器
3.基本操作函数:b.assign(a.begin(),a.end())--将容器a的值赋值给容器b
b.erase(b.begin()+5);--------删除第6个元素
a.begin();-------------------返回开始的迭代器
a.end();---------------------返回最后的迭代器
a.insert(t);-----------------将元素t插入容器
a.count(t);------------------判断a里有没有值为t的元素若存在返回1否则返回0
a.empty();-------------------判断容器是否为空,如果为空返回1否则返回0
a.size();--------------------返回容器内元素的个数
a.erase(a.begin());----------删除首元素
a.erase(a.begin(),a.end());--删除区间内元素
a.erase(3);------------------删除值为3的元素
a.find(3);-------------------返回值为3的迭代器
a.swap(b);-------------------交换两个容器的值
a.clear();-------------------清空当前set

map:就是从键到值得映射,重载了[]运算符

map像数组的“高级版”,例如:map<string,int> mouth_name; 可以用这样的方式复制mouth_name["July"]=7(如果没有July下标的实例会自动插入
map和set很相似,map允许重复元素,并且map比set多一个键值
1.头文件
#include <map>
2.定义map对象:
max<int,string> a;
3.常用函数
a.begin();--------------------------------------返回开始的迭代器
a.end();----------------------------------------返回最后的迭代器
a.insert(pair<int,string>(123,"abcde"));--------插入下标为123值为abcde的元素
a.begin()->first;-------------------------------定义max<int,string> a来说,表示map对象第一个元素的int型数据
a.begin()->second;------------------------------定义max<int,string> a来说,表示map对象第二个元素的string型数据
a.find(3)---------------------------------------返回下标为3的元素的迭代器,如果没有返回最后一个元素的迭代器
a.count(2)--------------------------------------判断a里有没有下标为2的元素若存在返回1否则返回0
a.erase(2)--------------------------------------删除键为2的元素
a.erase(a.begin());-----------------------------删除第1个元素
a.erase(a.begin(),a.end());---------------------删除区间内元素
a.empty();--------------------------------------判断容器是否为空,如果为空返回1否则返回0
a.size();---------------------------------------返回容器内元素个数
a.swap(b);--------------------------------------交换两个容器的值
a.clear();--------------------------------------清空当前map

stack:栈

1.头文件
#include<stack>
2.定义stack对象:
stack<int> a;
3.基本操作函数:
int t;
a.push(t);----------将t的值入栈,无返回值
a.pop();------------出栈无返回值,无返回值
a.empty();----------判断栈是否为空,如果为空返回1否则返回0
a.top();------------返回栈顶元素
a.size();-----------返回栈的元素数目

queue:队列

1.头文件
#include<queue>
2.定义queue对象:
queue<int> a;
3.基本操作函数:
int t;
a.push(t);----------将t入队,无返回值
a.pop();------------删除第一个元素
a.empty();----------判断队列是否为空,如果为空返回1否则返回0
a.front();----------返回队列第一个元素
a.back();-----------返回队列最后一个元素
a.size();-----------返回队列长度

list:双向链表

1.头文件
#include<list>
2.定义list对象
list<int> L0; // 空链表
list<int> L1(9); // 建一个含个默认值是的元素的链表
list<int> L2(5,1); // 建一个含5个元素的链表,值都是1
list<int> L3(L2); // 建一个L2的copy链表
list<int> L4(L0.begin(), L0.end());//建一个含L0一个区域的元素
3.基本操作函数:
L1.assign(4,3);----------------------分配4个元素,值为3
L1.assign(L2.begin(),L2.end());------分配区间的分配值
L1.begin();--------------------------返回第一个元素的迭代器
L1.end();----------------------------返回最后一个元素的下一个元素的迭代器
L1.push_back(4);---------------------插入一个元素到链表尾
L1.push_front(4);--------------------插入一个元素到链表头
L1.pop_back();-----------------------删除最后一个元素
L1.pop_front();----------------------删除第一个元素
L1.erase(L1.begin());----------------删除迭代器指向的元素
L1.erase(L1.begin(),L1.end());-------删除区间元素
L1.remove(3);------------------------删除链表中值为3的全部元素
L1.size();---------------------------返回链表的值
L1.reverse();------------------------反转链表
L1.sort();---------------------------将链表的值升序排列
L1.sort(greater<int>());-------------降序排列
L1.swap(L2);-------------------------L1和L2的值互换
L1.unique();-------------------------删除相邻重复元素
L1.clear();--------------------------清空链表

STL常用的容器的更多相关文章

  1. STL常用序列容器

    这里简要的记述一下STL常用容器的实现原理,要点等内容. vector vector是比较常用的stl容器,用法与数组是非类似,其内部实现是连续空间分配,与数组的不同之处在于可弹性增加空间,而arra ...

  2. STL - 常用关联容器代码 - set & multiset

    代码如下: /* 5. set & multiset */ set<string> cities{ "Braunschweig", "Hanover& ...

  3. STL - 常用顺序容器代码

    不多说,看代码 #include <iostream> #include <vector> #include <deque> #include <list&g ...

  4. STL常用容器使用方法

    在程序头部使用#include<stack>来引入STL的stack容器,然后使用stack<int> s语句来声明一个管理整型数据的容器s.stack常用成员函数:push( ...

  5. 【Example】C++ STL 常用容器概述

    前排提醒: 由于 Microsoft Docs 全是机翻.所以本文表格是我人脑补翻+审校. 如果有纰漏.模糊及时评论反馈. 序列式容器 序列容器是指在逻辑上以线性排列方式存储给定类型元素的容器. 这些 ...

  6. c++ STL 常用容器元素类型相关限制 指针 引用

    c++ 的 STL 中主要有 vector , list, map, set  , multimap,multiset 这些容器完全支持使用内置类型和指针(指针注意内存泄露问题). 就是说乱用智能指针 ...

  7. STL——序列式容器

    一.容器概述与分类 1. STL容器即是将运用最广的一些数据结构实现出来.常用的数据结构有array, list, tree, stack, queue, hash table, set, map…… ...

  8. C++标准模板库(STL)和容器

    1.什么是标准模板库(STL)? (1)C++标准模板库与C++标准库的关系 C++标准模板库其实属于C++标准库的一部分,C++标准模板库主要是定义了标准模板的定义与声明,而这些模板主要都是 类模板 ...

  9. C++ STL 常用拷贝和替换算法

    C++ STL 常用拷贝和替换算法 copy() 复制 vector<int> vecIntA; vecIntA.push_back(1); vecIntA.push_back(3); v ...

随机推荐

  1. FL2440 rt3070模块station模式动态获取IP地址

    ---------------------------------------------------------------------------------------------------- ...

  2. 深入理解Vue父子组件通讯的属性和事件

    在html中使用元素,会有一些属性,如class,id,还可以绑定事件,自定义组件也是可以的.当在一个组件中,使用了其他自定义组件时,就会利用子组件的属性和事件来和父组件进行数据交流. 父子组件之间的 ...

  3. 使用zbar 解码二维码 条形码

    #!/usr/bin/env python # coding: u8 import os import zbar import Image import urllib import uuid def ...

  4. 悟道—位IT高管20年的职场心经(读书笔记三)

    悟道--一位IT高管20年的职场心经 第三章 世事洞明皆学问 职场就是你的大半个世界 是你一辈子也读不完的一大本书 想明确一个道理. 看明确一件事儿, 你就向成功迈进了一步. 1.1  "四 ...

  5. JavaScript 查看函数调用栈

    1.调用栈 js中的this与函数调用栈密切相关.  this实在函数调用时发生的绑定,它指向完全取决于函数在哪里被调用.    2.示例 <!DOCTYPE html> <html ...

  6. 2014哈商大ICPC/ACM校赛解题报告

    被debug邀请去參加校赛,哎,被虐..我对不起工大.. 由于本人不搞ACM,算法处于HelloWorld水准.. 虽然题目除了鸟不拉屎星人之外都非常水,但我能做到这个程度,全然是超水平发挥了.. 数 ...

  7. Oracle安装过程中的几点注意

    为追求统一,安装了oracle 11g step 4时需要改一下名称,利于记忆 数据库安装完之后需要取消SCOTT账户的锁定 完成后点击SQL Developer会出现——"应用程序开发&q ...

  8. iOS开发-发送邮件(E-mail)方法整理合集(共3种)

    前言:在IOS开发中,有时候我们会需要用到邮件发送的功能.比如,接收用户反馈和程序崩溃通知等等.其实这个功能是很常用的,因为我目前就有发送邮件的开发需求,所以顺便整理下IOS发送邮件的方法. IOS原 ...

  9. PHP-深入理解Opcode缓存

    1.什么是opcode缓存? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode).Opcode cache的目地是避免重复编译, ...

  10. pandas时间序列滑窗

    时间序列数据统计-滑动窗口 窗口函数 import pandas as pd import numpy as np ser_obj = pd.Series(np.random.randn(1000), ...