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. 转:Java logger组件:slf4j, jcl, jul, log4j, logback, log4j2

    先说结论 建议优先使用logback 或 log4j2.log4j2 不建议和 slf4j 配合使用,因为格式转换会浪费性能. 名词:jcl 和 jul 标题中的 jcl 是 apache Jakar ...

  2. java.lang.ClassNotFoundException: com.demo.search.extractAbstract.service.ExtractAbstractServiceHandler

    在利用 Spring 对 thrift 进行集成时,出现错误: avax.servlet.ServletException: Servlet.init() for servlet search-nlp ...

  3. 机器学习-Python 01

    机器学习中最常用最流行的语言工具现阶段应该是Python, 这篇文章主要介绍一些常用的Python语法知识.本篇博文适合那些有其他语言基础的程序员们,如果一点基础都没有,我建议先跳过.博主以前是做移动 ...

  4. iOS开发-KVO的奥秘

    转自:http://www.jianshu.com/p/742b4b248da9 序言 在iOS开发中,苹果提供了许多机制给我们进行回调.KVO(key-value-observing)是一种十分有趣 ...

  5. iOS RSA加解密签名和验证

    转自:http://www.jianshu.com/p/81b0b54436b8 Pre:在公司负责了一个项目,需要用到iOS RSA验证签名的功能.后台给我的仅仅是一个公钥的字符串.经过起初的一段时 ...

  6. golang包管理的古往今来

    https://golang.org/ before GO1.5-GOPATH 在GO1.5之前用GOPATH以及GOROOT这两个环境变量来决定包的位置. GOROOT就是告知当前go的安装位置,编 ...

  7. NET视频教程分享

    地址:链接:https://pan.baidu.com/s/1q47WN1XFw19vLZ8XZqnB_g    提取码:8ut2  这是我收集的一套.NET学习视频教程(某智24期视频),分享出来, ...

  8. Ceph 架构以及原理分析

    一.架构 Ceph在一个统一的系统中独特地提供对象,块和文件存储. Ceph高度可靠,易于管理且免费. Ceph的强大功能可以改变您公司的IT基础架构以及管理大量数据的能力. Ceph提供了非凡的可扩 ...

  9. Day 05 作业

    目录 作业 输入姑娘的年龄后,进行以下判断: 复习while循环,打印1-100之间的奇数和 复习while循环,猜年龄游戏升级版,有以下三点要求: 作业 输入姑娘的年龄后,进行以下判断: 如果姑娘小 ...

  10. Jmeter介绍以及脚本制作与调试

    目录 Jmeter介绍 Jmeter安装 Jmeter主要测试组件 Jmeter元件作用域与执行顺序 Jmeter运行原理 Jmeter脚本制作 Jmeter脚本调试 Jmeter介绍 Jmeter ...