vector:

是一种在结尾处高效插入、删除的容器,本质上是一个动态数组,可以自动维护数组的空间分配。它也允许在开头和中间插入、删除数据,但是效率极低。

<span style="font-size:10px;">#include <iostream>
#include <vector>
#include <string>
using namespace std; void main(){
vector<string> str_vec; //创建一个空的vector
cout<<str_vec.size()<<endl; // 0 包含0个元素
cout<<str_vec.capacity()<<endl; //0 预分配0个元素的内存空间 /*
-----------------------------------------------------------------------------
透过push_back在尾部插入元素
-----------------------------------------------------------------------------
*/
str_vec.push_back("yao ming");
cout<<str_vec.size()<<endl; // 1 包含0个元素
cout<<str_vec.capacity()<<endl; //1 预分配1个元素的内存空间 str_vec.push_back("wang zhi zhi");
cout<<str_vec.size()<<endl; // 2 包含0个元素
cout<<str_vec.capacity()<<endl; //2 预分配2个元素的内存空间 str_vec.push_back("yi jian lian");
cout<<str_vec.size()<<endl; // 3 包含0个元素
cout<<str_vec.capacity()<<endl; //3 预分配3个元素的内存空间 str_vec.push_back("liu wei");
cout<<str_vec.size()<<endl; // 4 包含0个元素
cout<<str_vec.capacity()<<endl; //4 预分配4个元素的内存空间 str_vec.push_back("zhu fang yu");
cout<<str_vec.size()<<endl; // 5 包含0个元素
cout<<str_vec.capacity()<<endl; //6 预分配6个元素的内存空间,所以capacity的值>=size的值。
//现在vector中有6个元素:依次为"yao ming" ,"wang zhi zhi" ,"yi jian lian" ,"liu wei" ,"zhu fang yu" /*
---------------------------------------------------------------------------------
通过下标来访问vector中的元素
size_type是一个无符号整数,主要是为了可移植性,由于机器的环境,它的长度有可能不同
---------------------------------------------------------------------------------
*/
for(vector<string>::size_type i = 0 ; i< str_vec.size() ; i++){
cout<<str_vec[i]<<endl;
} /*
------------------------------------------------------------------------------------------------
通过迭代器来访问,迭代器类似指针,通过begin获得第一个元素,通过end获得最后一个元素的下一个位置。
vector支持迭代器的加、减操作来改变指向。
上面的迭代器是可读可写迭代器,还有一种const_iterator是只读迭代器,通过cbegin获得第一个元素,通过
cend获得最后一个元素的下一个位置。
-----------------------------------------------------------------------------------------------
*/
vector<string>::iterator h = str_vec.begin();
for(; h!=str_vec.end() ;h++){
cout<<*h<<endl;
} // vector<string>::const_iterator h = str_vec.cbegin();
// for(; h!=str_vec.cend() ;h++){
// cout<<*h<<endl;
// } /*
---------------------------------------------------------------------------------
insert在指定位置插入元素
---------------------------------------------------------------------------------
*/
h = str_vec.begin();
h = h + 2; //指向第三个元素
str_vec.insert(h , "jordan"); //在第三个元素位置,插入“jordan”
h = str_vec.begin(); /*
--------------------------------------------------------------------------------------
pop_back删除末尾元素
--------------------------------------------------------------------------------------
*/
str_vec.pop_back(); /*
--------------------------------------------------------------------------------------
erase删除指定位置或指定范围的元素
--------------------------------------------------------------------------------------
*/
h = str_vec.begin();
h=h+2; //指向第三个元素
str_vec.erase(h); //删除第三个元素
//str_vec.erase(h,h+2); //删除h元素到h+2之前的元素 /*
--------------------------------------------------------------------------------------
clear删除所有元素
--------------------------------------------------------------------------------------
*/
str_vec.clear();
}</span>

deque:

与vector唯一的不同是,deque 支持高效的首部和尾部的插入删除。所以多了一下2个函数,其他类似

<span style="font-size:10px;">deque<T> b;  //定义一个deque对象,存储T类型数据
b.push_front(T c); //将C元素插入首部
b.pop_front(); //删除首部元素</span>

list:

双向链表,非顺序存储,不支持通过下标读取元素、不支持跨元素读写元素、没有capacity();

//插入元素
list<T> a;
a.push_back(T b);
a.push_front(T b);
a.insert( 指定位置 ,数值 );
a.remove(值);
a.erase(指定位置);

stack:

stack<int> s1;
stack<string> s2;
stack 的基本操作有:
入栈,如例:s.push(x);
出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素。
访问栈顶,如例:s.top()
判断栈空,如例:s.empty(),当栈空时,返回true。
访问栈中的元素个数,如例:s.size()。

queue:

定义queue 对象的示例代码如下:
queue<int> q1;
queue<double> q2; queue 的基本操作有:
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()

find函数:

//从迭代器First开始到Last,查找第一个值为Value的元素,并返回该元素的迭代器。若没有查找到则返回Last
InputIterator find (InputIterator First , InputIterator Last ,const T & Value);

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

  1. C++ STL中常见容器的时间复杂度和比较和分析

    C++ STL中常见容器的时间复杂度 map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种.不同操作的时间复杂度近似为: 插入: O( ...

  2. C++ STL vector容器学习

    STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...

  3. C++ STL bitset 容器详解

    C++ STL bitset 容器详解 本篇随笔讲解\(C++STL\)中\(bitset\)容器的用法及常见使用技巧. \(bitset\)容器概论 \(bitset\)容器其实就是个\(01\)串 ...

  4. 详解C++ STL set 容器

    详解C++ STL set 容器 本篇随笔简单介绍一下\(C++STL\)中\(set\)容器的使用方法及常见使用技巧. set容器的概念和性质 \(set\)在英文中的意义是:集合.\(set\)容 ...

  5. 浅谈C++ STL vector 容器

    浅谈C++ STL vector 容器 本篇随笔简单介绍一下\(C++STL\)中\(vector\)容器的使用方法和常见的使用技巧.\(vector\)容器是\(C++STL\)的一种比较基本的容器 ...

  6. 浅谈C++ STL queue 容器

    浅谈C++ STL queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(queue\)容器的使用方法和常见的使用技巧.\(queue\)容器是\(C++STL\)的一种比较基本的容器.我们 ...

  7. 浅谈C++ STL stack 容器

    浅谈C++ STL stack 容器 本篇随笔简单介绍一下\(C++STL\)中\(stack\)容器的使用方法和常见的使用技巧. stack容器的概念 \(stack\)在英文中是栈的意思.栈是一种 ...

  8. 详解C++ STL priority_queue 容器

    详解C++ STL priority_queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(priority_queue\)容器的使用方法和常见的使用技巧. priority_queue容器 ...

  9. 浅谈C++ STL deque 容器

    浅谈C++ STL deque 容器 本篇随笔简单介绍一下\(C++STL\)中\(deque\)容器的使用方法及常见使用技巧. deque容器的概念 \(deque\)的意义是:双端队列.队列是我们 ...

随机推荐

  1. Android开发——自动生成Android屏幕适配的dimens.xml文件

    使用dimens.xml解决屏幕适配问题是Android官方解决方案,本文主要讲述了如何自动生成Android屏幕适配的dimens.xml,减少了工作量,在维护dimens.xml文件时更加省时省力 ...

  2. Python、C和Java对比

    先上一个Python小测试: #!/usr/bin/env python #coding=utf-8 ''' 等腰三角形 ''' for i in range(1,6): print ' '*(6-i ...

  3. Django中载入js和css文件

    Django中载入js和css文件 项目的文件夹结构例如以下: mysite |-mysite |-|-static |-|---js和css文件 |-|-|-init.py |-| |-models ...

  4. android131 360 01 闪屏页和主页面

    主界面: 软件升级流程: 清单文件: <?xml version="1.0" encoding="utf-8"?> <manifest xml ...

  5. 删除vector中的偶数元素,删除list中的奇数元素

    #include<vector> #include<list> #include<iostream> using namespace std; int main() ...

  6. [Effective C++ --024]若所有参数皆需类型转换,请为此采用non-member函数

    引言 假设我们有这样的类: class A{ public: A(, ) {}; int num() const; int den() const; const A operator* (const ...

  7. NPOI导出多表头Execl(通过html表格遍历表头)

    关于NPOI的相关信息,我想博客园已经有很多了,而且NPOI导出Execl的文章和例子也很多,但导出多表头缺蛮少的:今天要讲的通过自己画html表格:通过html表格来导出自定义的多表头: 先来看要实 ...

  8. eclipse安装android sdk后工具栏没有图标的设置

    如果没有出现这android图标,选择'Window>Customize Perspective...>Commands',并在'Available command groups'中勾选' ...

  9. Database and models

    Database and models The database Now that we have the Album module set up with controller action met ...

  10. Oracle批量加注释,并生成html

    excel连接列名生成oracle注释 notes: A2为列名,B2为注释 ="comment on column ColAgreementHeader."&A2& ...