STL常用的数据结构容器及说明

序列式容器

vector

向量,有序数列。连续的空间存储,可以使用[ ]操作符,可以快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间随机的插入、删除元素要慢。而且,如果一开始分配的空间不够时,有一个重新分配更大空间的过程。

list

双向链表。访问随机元素没有vector快,随机地插入元素要比vector快。

deque

双端队列。小片内连续,片与片间链式连接。可以用[],但速度没有vector快。同vector一样,可以快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间随机的插入、删除元素要慢。一般duque当队列,能用vector就用vector。

适配器容器

stack

栈。默认deque容器,也可以用vector、list存储

queue

队列。默认deque容器,也可以用list。

关联式容器

map(映射、键值对二叉树),set(集合、值二叉树)

容器使用,按个人喜好排序

vector

头文件、创建、访问元素

 #include<vector>

vector<int> vec//创建一个空vector
vector<int> vec = {,,,,}
vector<int> vec(int n)//创建一个vector,元素个数为nSize
vector<int> vec(int n,int t)//创建一个vector,元素个数为n,值均为t
vector<int> vec(vector&)//复制另一个vector
vector<int> vec(begin,end)//复制[begin,end)区间内另一个数组的元素到vector中,begin、end都是迭代器

for(int i=0;i<vec.size();++i){ cout<<vec[i]; }

操作函数

  • push_back 在数组的最后添加一个数据
  • pop_back 去掉数组的最后一个数据
  • empty 判断vector是否为空
  • erase 删除指针指向的数据项
  • clear 清空当前的vector
  • size 当前使用数据的大小
  • max_size 得到vector最大可以是多大
  • capacity 当前vector分配的大小
  • swap 与另一个vector交换数据
  • at 得到编号位置的数据
  • begin 得到数组头的指针
  • end 得到数组的最后一个单元+1的指针
  • front 得到数组头的引用
  • back 得到数组的最后一个单元的引用
  • resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
  • reserve 改变当前vecotr所分配空间的大小
  • rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
  • rend 将vector反转构的结束指针返回(其实就是原来的begin-1)

更多http://www.cplusplus.com/reference/vector/vector/

stack

头文件与创建

#include<stack>

stack<int> st;//默认底层容器为deque

stack<int,vector<int>> stv//底层容器为vector,第一个参数无效

操作函数

  • top():返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。
  • push(val):可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。
  • pop():弹出栈顶元素。
  • size():返回栈中元素的个数。
  • empty():在栈中没有元素的情况下返回 true。
  • emplace():用传入的参数调用构造函数,在栈顶生成对象。
  • swap(stack<T> & other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。对于 stack 对象有一个特例化的全局函数 swap() 可以使用。

更多http://www.cplusplus.com/reference/stack/stack/

deque

创建与初始化

deque<T> dq;

//带参构造函数
deque(beg,end);//用区间[beg,end)的内容初始化
deque(n,val);//初始化n个val
deque(const deque &dq);//复制dq

操作函数

  • push_back(elem); 尾部添加
  • push_front(elem); 头部添加
  • pop_back(); 尾部删除
  • pop_front(); 头部删除
  • front(); 返回第一个数组
  • back(); 返回最后一个数据
  • deque.size(); 元素个数
  • deque.empty(); 是否为空
  • clear(); 清空容器
  • erase(beg,end); 删除[beg,end)区间的数据,返回下一个数据的位置。
  • erase(pos); 删除pos位置的数据,返回下一个数据的位置
  • assign(beg, end); 将[beg, end)区间中的数据拷贝赋值
  • assign(n, elem); 将n个elem拷贝赋值
  • deque& operator=(const deque &deq); 重载等号操作符
  • deque.resize(num); 设置deque大小,多余默认填充,少的删除
  • deque.resize(num, elem); 设置deque大小,多余用elem填充,少的删除
  • at(idx); 索引,抛出异常
  • insert(pos,elem); pos位置插入elem
  • insert(pos,n,elem); pos位置插入n个elem
  • insert(pos,beg,end); pos位置插入[beg,end)区间的数据

更多http://www.cplusplus.com/reference/list/list/

map

头文件、创建与访问

#include<map>
map<char,int> intmap;
intmap['I'] = ;intmap['V'] = ;intmap['X'] = ;
intmap.insert({'L',});
intmap['C'];// 只加key,不加value。数值型value默认为0,char、string的value默认空。
map<char,int> intmapppp = {
{'C',},{'D',},{'M',}
};// 列表序列化,c++11后支持
int five = intmap['V'];//支持[]操作,也可以用at()函数

操作函数

  • insert()        插入元素
  • size()          返回map中元素的个数
  •  begin()         返回指向map头部的迭代器
  • clear()        删除所有元素
  • count()         返回指定元素出现的次数
  • empty()         如果map为空则返回true
  • end()           返回指向map末尾的迭代器
  • equal_range()   返回特殊条目的迭代器对
  • erase()         删除一个元素
  • find()          查找一个元素
  • get_allocator() 返回map的配置器
  • key_comp()      返回比较元素key的函数
  • lower_bound()   返回键值>=给定元素的第一个位置
  • max_size()      返回可以容纳的最大元素个数
  • rbegin()        返回一个指向map尾部的逆向迭代器
  • rend()          返回一个指向map头部的逆向迭代器
  • swap()           交换两个map
  • upper_bound()    返回键值给定元素的第一个位置
  • value_comp()     返回比较元素value的函数

更多http://www.cplusplus.com/reference/map/map/

list

链式存储,不支持根据下标随机存取元素,利用迭代器遍历。

初始化

  • list<int>lst1;          //创建空list
  • list<int> lst2(5);       //创建含有5个元素的list
  • list<int>lst3(3,2);  //创建含有3个元素的list
  • list<int>lst4(lst2);    //使用lst2初始化lst4
  • list<int>lst5(lst2.begin(),lst2.end());  //同lst4

函数

  • Lst1.assign() 给list赋值
  • Lst1.back() 返回最后一个元素
  • Lst1.begin() 返回指向第一个元素的迭代器
  • Lst1.clear() 删除所有元素
  • Lst1.empty() 如果list是空的则返回true
  • Lst1.end() 返回末尾的迭代器
  • Lst1.erase() 删除一个元素
  • Lst1.front() 返回第一个元素
  • Lst1.get_allocator() 返回list的配置器
  • Lst1.insert() 插入一个元素到list中
  • Lst1.max_size() 返回list能容纳的最大元素数量
  • Lst1.merge() 合并两个list
  • Lst1.pop_back() 删除最后一个元素
  • Lst1.pop_front() 删除第一个元素
  • Lst1.push_back() 在list的末尾添加一个元素
  • Lst1.push_front() 在list的头部添加一个元素
  • Lst1.rbegin() 返回指向第一个元素的逆向迭代器
  • Lst1.remove() 从list删除元素
  • Lst1.remove_if() 按指定条件删除元素
  • Lst1.rend() 指向list末尾的逆向迭代器
  • Lst1.resize() 改变list的大小
  • Lst1.reverse() 把list的元素倒转
  • Lst1.size() 返回list中的元素个数
  • Lst1.sort() 给list排序
  • Lst1.splice() 合并两个list
  • Lst1.swap() 交换两个list
  • Lst1.unique() 删除list中重复的元素

更多http://www.cplusplus.com/reference/list/list/

queue

queue 和 stack 有一些成员函数相似,但在一些情况下,工作方式有些不同:

  • front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
  • back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
  • push(const T& obj):在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
  • push(T&& obj):以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
  • pop():删除 queue 中的第一个元素。
  • size():返回 queue 中元素的个数。
  • empty():如果 queue 中没有元素的话,返回 true。
  • emplace():用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。
  • swap(queue<T> &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。

set

begin() //返回指向第一个元素的迭代器
clear() //清除所有元素
count() //返回某个值元素的个数,不是1就是0
empty() //如果集合为空,返回true(真)
end() //返回指向最后一个元素之后的迭代器,不是最后一个元素
erase() //删除集合中的元素
find() //返回一个指向被查找到元素的迭代器
insert() //在集合中插入元素
max_size() //返回集合能容纳的元素的最大限值
size() //集合中元素的数目
swap() //交换两个集合变量

更多http://www.cplusplus.com/reference/set/set/

C++的:: 是作用域,如果想在类的外部引用静态成员函数,或在类的外部定义成员函数都要用到。使用命名空间里的类型或函数也要用到(如:std::cout, std::cin, std::string 等等)

起个别名

typedef list<int> LISTINT;

LISTINT list;

window.h使用Sleep()方法,大写S,毫秒单位

Sleep(1000);休息一秒

STL常用结构与方法简明总结的更多相关文章

  1. STL常用容器使用方法

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

  2. c++ STL常用算法使用方法

    #include <string> #include <vector> #include <functional> #include <iostream> ...

  3. 介绍C++ STL常用模板使用方法的相关资料

    1.vector的几种初始化及赋值方式

  4. UIView常用属性与方法/UIKit继承结构

    UIView常用属性与方法 @interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDy ...

  5. 干货:结合Scikit-learn介绍几种常用的特征选择方法

    原文  http://dataunion.org/14072.html 主题 特征选择 scikit-learn 作者: Edwin Jarvis 特征选择(排序)对于数据科学家.机器学习从业者来说非 ...

  6. 结合Scikit-learn介绍几种常用的特征选择方法

    特征选择(排序)对于数据科学家.机器学习从业者来说非常重要.好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点.底层结构,这对进一步改善模型.算法都有着重要作用. 特征选择主要有两个功能: 减 ...

  7. Foudation框架之一些常用结构体和常用类

    表示范围作用的结构体:NSRange:       有三种方式创建新的NSRange: 1.NSRange range:            range.location = 17;         ...

  8. 从头开始-07.Foundation框架常用结构体

    一.Foundation框架常用结构体NSRange\CGRange.NSPoint\CGPoint.NSSize\CGSize. NSRect\CGRect 的使用 1.  基本使用: //NSRa ...

  9. (摘录)26个ASP.NET常用性能优化方法

    数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池(Co ...

随机推荐

  1. CSS浮动和各种定位

    CSS定位 css定位机制 文档流:元素按照在HTML中的位置决定排布的过程 块级元素是从上到下的,内联元素是从左到右的 浮动 position布局 position css position属性用于 ...

  2. 监控io性能、free、ps命令、查看网络状态、Linux下抓包 使用介绍

    第7周第2次课(5月8日) 课程内容: 10.6 监控io性能 10.7 free命令10.8 ps命令10.9 查看网络状态10.10 linux下抓包扩展tcp三次握手四次挥手 http://ww ...

  3. window.open()打开新窗口 及参数

    在jsp页面中需要使用到弹出窗口,想到js的window对象有一个open方法可以弹出窗口,于是对open方法进行记录. 首先是open方法的语法及定义: 定义: open() 方法用于打开一个新的浏 ...

  4. 【BZOJ4001】【Luogu P3978】 [TJOI2015]概率论

    题目描述: Description: Input 输入一个正整数N,代表有根树的结点数 Output 输出这棵树期望的叶子节点数.要求误差小于1e-9 Sample Input 1 Sample Ou ...

  5. MySQL+Keepalived高可用配置

    注意:首先关闭两台机器的防火墙 setenforce 0 Environment: 2台CentOS测试机器  安装好MySQL 1.两台机器安装keepalived yum -y install k ...

  6. css4——浮动

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. 接口访问报错:The valid characters are defined in RFC 7230 and RFC 3986

    写了个接口,在测试访问的时候,需要传json串,但是后台报错了 The valid characters are defined in RFC 7230 and RFC 3986 当前使用的tomca ...

  8. mac office软件的安装与破解

    1.mac  office 软件的安装及破解  http://10176523.cn/archives/29/ 下载后安装  切记不要登录 然后用这个文件 破解

  9. 一些demo

    绑定端口demo: #include <stdio.h> #include <sys/socket.h> #include <stdlib.h> #include ...

  10. vue项目中使用腾讯地图

    最近在使用腾讯地图api(以下以位置数据可视化API为例),在初建项目之后,按照官网的说法,直接引入 再将官网的初始化例子放一个方法 在mounted中调用即可看到腾讯地图,但是我引入之后,一直报TM ...