C/C++函数学习(6)容器分类

http://net.pku.edu.cn/~yhf/UsingSTL.htm  三十分钟掌握STL


STL容器分三大类:顺序容器(sequence container)、关联容器(associative container)和容器适配器(container adapter)。另外我们熟悉的C语言式数组合string,它们也是一种容器,称为近容器(near container)。

(1)顺序容器--提供顺序表的表示和操作
vector(向量)  可以随机访问序列中的单个元素,在序列尾部快速插入和删除元素。如果在序列中插入和删除元素,时间与序列长度成正比。
deque(双向对列)  可以随机访问序列中的单个元素,在序列头或尾部快速插入和删除元素。如果在序列中插入和删除元素,时间与序列长度成正比。
list(双向链表)  动态链式存储数据,可以从任意位置快速插入和删除元素。
(2)关联容器--提供集合和映像的表示和操作
set(集合)  不允许重复值,可以快速查
multiset(集合)  允许重复值,可以快速查找
map(映像)  一对一的映像,不允许重复值,可以实现基于关键字的快速查找
multimap(映像)  一对多的映像,允许重复值,可以实现基于关键字的快速查找
(3)容器适配器--特殊顺序表
stack(堆栈)  后进先出(LIFO,last-in first-out)表,只能在表头插入和删除元素
queue(队列)  先进先出(FIFO,first-in first-out)表,只能在表头删除元素,在表尾插入元素
priority_queue(优先队列)  优先级最高的元素总是第一出列
这些表头文件都在namespace std中
-----------------------------------------------------------------------------------------
  头文件                |            包含容器
-----------------------------------------------------------------------------------------
<vector>              |            vector
-----------------------------------------------------------------------------------------
<list>                   |            list
-----------------------------------------------------------------------------------------
<deque>             |             deque
-----------------------------------------------------------------------------------------
<queue>             |            queue和priority_queue
-----------------------------------------------------------------------------------------
<stack>               |            stack
-----------------------------------------------------------------------------------------
<map>                |            map  multimap
-----------------------------------------------------------------------------------------
<set>                  |            set  multiset
-----------------------------------------------------------------------------------------
<bitset>             |            bitset 
-----------------------------------------------------------------------------------------
=========================================================================================
vector成员函数说明
size_type 无符号整数
iterator 随机访问的迭代,迭代是对象版本的指针
reference 可以转换为T&的类型
const_reference 可以转换为T&常量的类型
=========================================================================================
主要成员函数及其功能:
vector::vector()
vector::vector( const T &V)
vector::vector( size_type n,const T &val=T() )
vector::~vector()
reference vector::at( int i )
const_reference vector::at( int i )
reference vector::back()
reference vector::back()const
iterator vector::begin()
const_iterator vector::begin()
void vector::clear()
bool vector::empty()const  如果为容器为空,返回true;否则返回false
iterator vector::end()
const_iterator vector::end()
iterator vector::erase( iterator pos )
reference vector::front()
reference vector::front()const
size_type max_size() const;            // 返回容器能容纳的最大元素个数
size_type size() const;                // 返回容器中元素个数  
size_type capacity() const;            // 容器能够存储的元素个数,有:capacity() >= size()  
void reserve(size_type n);             // 确保capacity() >= n
void resize(size_type n, T x = T());   // 确保返回后,有:size() == n;如果之前size()<n,那么用元素x的值补全。
 
reference front();                     // 返回容器中第一个元素的引用(容器必须非空)
const_reference front() const;                   
reference back();                      // 返回容器中最后一个元素的引用(容器必须非空)
const_reference back() const;
 
reference operator[](size_type pos);   // 返回下标为pos的元素的引用(下标从0开始;如果下标不正确,则属于未定义行为。
const_reference operator[](size_type pos) const; 
void push_back(const T& x);            // 向容器末尾添加一个元素          
void pop_back();                       // 弹出容器中最后一个元素(容器必须非空)
 
// 注:下面的插入和删除操作将发生元素的移动(为了保持连续存储的性质),所以之前的迭代器可能失效
iterator insert(iterator it, const T& x = T());        // 在插入点元素之前插入元素(或者说在插入点插入元素)
void insert(iterator it, size_type n, const T& x);     // 注意迭代器可能不再有效(可能重新分配空间)
void insert(iterator it, const_iterator first, const_iterator last);
 
iterator erase(iterator it);           // 删除指定元素,并返回删除元素后一个元素的位置(如果无元素,返回end())
iterator erase(iterator first, iterator last); // 注意:删除元素后,删除点之后的元素对应的迭代器不再有效。
 
void clear() const;                    // 清空容器,相当于调用erase( begin(), end())
 
void assign(size_type n, const T& x = T());   // 赋值,用指定元素序列替换容器内所有元素
void assign(const_iterator first, const_iterator last);
 
const_iterator begin() const;          // 迭代序列
iterator begin();
const_iterator end() const;
iterator end();
 
const_reverse_iterator rbegin() const;
reverse_iterator rbegin();
const_reverse_iterator rend() const; 
reverse_iterator rend();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python字符串内建函数

方法 描述 string.capitalize() 把字符串的第一个字符大写 string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 string.count(str, beg0,endlen(string)) 返回 str 在 string 里面出现的次数&#xff0c;如果 beg 或者 end 指…

巧用快捷键轻松设置Excel单元格格式

巧用快捷键轻松设置Excel单元格格式 在应用程序中使用快捷键&#xff0c;可以使我们避免在键盘与鼠标之间来回切换&#xff0c;从而节省大量的时间&#xff0c;显著地提高工作效率。多掌握一些常用的快捷键&#xff0c;可以使您告别菜鸟时代&#xff0c;迅速成长为电脑应用的高…

perror()与strerror()的应用及区别 man手册查询

perror() 和 strerror() 以一种直观的方式打印出错误信息&#xff0c;对于调试程序和编写优秀的程序非常有用。下面是perror() 与 strerror() 的使用范例及区别&#xff1a;perror()原型&#xff1a;#include <stdio.h>void perror(const char *s);其中&#xff0c;perro…

Linux下解压缩包命令

各种压缩文件的解包与打包命令 .tar 解包&#xff1a;tar xvf FileName.tar打包&#xff1a;tar cvf FileName.tar DirName——————————————— .tar .xz 解包&#xff1a;xz -d openvpn-2.3.5.tar.xz --stdout | tar -xv 打包&#xff1a;tar cvf - openvpn-2.3.…

PyQt学习总结

1&#xff09;QDoubleSpinBox() setRange(min,max) 设置范围Min~maxsetSingleStep(step) 设置步长为stepsetValue(value) 设置当前值为valuesetPrefix("$") 设置前缀为$setSuffix("%"&#xff09; 设置后缀为%selectAl…

Qt样例学习1(数字时钟)

/*main.cpp*/ #include <QApplication> #include <QTextCodec> #include "digitalclock.h"int main(int argc, char *argv[]) {QApplication app(argc, argv);//显示本地化&#xff0c;解决中文乱码.QTextCodec::setCodecForTr(QTextCodec::codecForLoca…

linux网络编程--数据结构与函数原型

套接字有三种类型&#xff1a;流式套接字&#xff08;SOCK_STREAM&#xff09;&#xff0c;数据报套接字&#xff08;SOCK_DGRAM&#xff09;及原始套接字。 socket() | bind() | listen() | socket() a…

OpenGL画简单图形

#include <GL/glut.h>#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") /*三角形GL_TRIANGLES(三个点成一个三角形)GL_TRIANGLE_STRIP(相邻三点成一个三角形)GL_TRIANGLE_FAN(同第二个&#xff0c;后2个和第一…

ubuntu下编译OpenGL

安装基本编译环境&#xff1a; sudo apt-get install build-essential 安装Opengl工具箱&#xff1a; sudo apt-get install freeglut3-dev /* main.cpp */ #include <GL/glut.h> #include <stdlib.h> #include <stdio.h> #include "app.h" using …

关于linux的进程和线程

关于linux的进程和线程 http://kenby.iteye.com/blog/1014039 Linux下的多线程编程 http://fanqiang.chinaunix.net/a4/b8/20010811/0905001105.html 线程的最大特点是资源的共享性&#xff0c;但资源共享中的同步问题是多线程编程的难点。linux下提供了多种方式来处理线程…

linux setsockopt函数

功能描述&#xff1a; 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中&#xff0c;它们总会出现在最上面的套接字层。当操作套接字选项时&#xff0c;选项位于的层和选项的名称必须给出。为了操作套接字层的选项&#xff0c;应该 将层的值指定为SOL_S…

struct linger

Linux下tcp连接断开的时候调用close()函数&#xff0c;有优雅断开和强制断开两种方式。那么如何设置断开连接的方式呢&#xff1f;是通过设置socket描述符一个linger结构体属性。linger结构体数据结构如下&#xff1a; #include <arpa/inet.h>struct linger {int l_onoff…

几种常见的排序算法

冒泡排序 冒泡排序算法的运作如下: 1、比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。 2、对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。这步做完后&#xff0c;最后的元素会是最大的数。 3、针对所有的元素重复以上的步骤…

linux下调试工具的应用

http://www.ibm.com/developerworks/cn/linux/l-pow-debug/

数据结构--赫夫曼树及其应用

讲解请参考 赫夫曼 ------ 赫夫曼树和赫夫曼编码的存储表示------ typedef struct {unsigned int weight;unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; typedef char ** HuffmanCode;void HuffmanCoding(HuffmanTree& HT,HuffmanCode & HC,int *w,int …

sqlite C/C++ API

官网&#xff1a;https://sqlite.org/download.html 下载代码安装三步走&#xff1a; ./configure // ./configure --help查看安装参数设置&#xff0c;学习configure的配置&#xff0c;明白安装后include、lib、bin等文件的位置 make make install学习SQL基本语法&#xff0…

线程属性总结

今天面试那哥们问起线程属性&#xff0c;me竟然就说出了一个&#xff0c;囧 学习&#xff1a;http://blog.csdn.net/zsf8701/article/details/7842392 http://blog.csdn.net/jxhnuaa/article/details/3254299 http://blog.sina.com.cn/s/blog_9bd573450101hgdr.html int pthre…

单链表面试经典问题

/************************************************** http://www.cnblogs.com/lifuqing/archive/2011/08/20/List.html http://www.cnblogs.com/wenjiang/p/3310233.html 链表经典问题汇总:http://blog.csdn.net/vividonly/article/details/6673758 链表有关的常见面试题:htt…

Linux SO_KEEPALIVE属性,心跳

对于面向连接的TCP socket,在实际应用中通常都要检测对端是否处于连接中,连接端口分两种情况: 1、连接正常关闭,调用close() shutdown()连接优雅关闭,send与recv立马返回错误,select返回SOCK_ERR; 2、连接的对端异常关闭,比如网络断掉,突然断电. 对于第二种情况,判断连接是否断…

Linux下ARM开发环境搭建

本人的系统环境&#xff1a;Linux ubuntu 3.8.0-35-generic #50-Ubuntu SMP Tue Dec 3 01:25:33 UTC 2013 i686 i686 i686 GNU/Linux 1、安装skyeye sudo apt-get install skyeye s kyeye -h可以看到skyeye的版本号为1.2.5也可以到http://sourceforge.jp/projects/sfnet_skyeye…