C++STL(Standard Template Library)标准模板库是通用类模板和算法的集合。包含一些标准的数据结构的实现如queues(队列),lists(链表),stacks(栈)等。STL提供了以下三类数据结构的实现:

  标准容器类:

顺序性容器
vector 从后面快速插入和删除,直接访问任何元素
deque 从前面或后面快速插入和删除,直接访问任何元素
list 双链表,从任何地方快速插入和删除
容器适配器
statck 后进先出
queue 先进后出
priority_queue 最高优先级元素总是第一个出列
关联容器
set 快速查找,不允许重复值
multiset 快速查找,允许重复值
map 一对多映射,基于关键字快速查找,不允许重复值
multimap 一对多映射,基于关键字快速查找,允许重复值

   

     现在开始具体解释:

  1、vector

  vector容器就相当于一个数组,但其大小可以不可预先指定,并且自动扩展,完全可以把它看成一个动态数组。在创建一个vector后,它会在内存中分配一块连续的内存空间进行数据存储,初始的大小可以预先制定也可以由vector默认指定。当内存使用完后它会自动增加内存。并且这个过程比较耗时,如下:

    首先,vector 会申请一块更大的内存块;

    然后,将原来的数据拷贝到新的内存块中;

    其次,销毁掉原内存块中的对象(调用对象的析构函数);

    最后,将原来的内存空间释放掉。

  构造函数

    vector<int> v1; //构造一个空的vector
    vector<int> v1( 5, 42 ); //构造了一个包含5个值为42的元素的Vector

  常用函数

    at()  返回指定位置的元素 

    push_back()  在Vector最后添加一个元素 

    size()  返回Vector元素数量的大小 

  代码示例如下:其中一定要包含头文件vector

 //vector.cpp
#include "vector"
#include "iostream"
using namespace std; int main()
{
vector <int> arr;//声明一个元素类型为int的容器
for (int i=;i<arr.size();i++)//size()返回当前容器的元素个数
{
arr.push_back(i);//向容器末尾添加元素
}
for (int i=;i<;i++)
{
cout<<arr.at(i)<<"\t";//获取指定位置的元素的值
}
getchar();
return ;
}

  resize() 改变Vector元素数量的大小
    void resize( size_type size, TYPE val ); //改变当前vector的大小为size,且对新创建的元素赋值val

arr.resize(,);//改变当前vector的大小为20,且对新创建的元素赋值22

  back()  返回最末一个元素 ,如下:

 cout<<arr.back()<<endl;//取最后一个元素输出

  capacity()  返回vector所能容纳的元素数量(在不重新分配内存的情况下)

cout<<arr.capacity()<<endl;// 返回vector所能容纳的元素数量(在不重新分配内存的情况下) 

  empty()  判断Vector是否为空(返回true时为空) 

     if(arr.empty())//判断Vector是否为空(返回true时为空)
{
cout<<"vector is empty!";
}
else
cout<<"vector is not empty!";

  clear()  清空所有元素 

    arr.clear();//清空所有元素,之后可以判断一下是否清空

  max_size()  返回Vector所能容纳元素的最大数量(上限) 

  cout<<"Vector所能容纳元素的最大数量(上限) :"<<arr.max_size()<<endl;//Vector所能容纳元素的最大数量(上限)

  swap()  交换两个Vector ,经过测试,两个容器的大小对交换结果没有影响,不论谁大,都不影响。

  swap(arr,arr2);//交换两个容器中的内容

  pop_back()  移除最后一个元素 

  arr.pop_back();//移除最后一个元素 

  front()  返回第一个元素的引用 

  cout<<arr.front()<<endl;//front()  返回第一个元素的引用 

  begin()  返回第一个元素的迭代器 

  end()  返回最末元素的迭代器(译注:实指向最末元素的下一个位置) 

  insert()  插入元素到Vector中 

    iterator insert( iterator loc, const TYPE &val ); //在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,

    void insert( iterator loc, size_type num, const TYPE &val );   //在指定位置loc前插入num个值为val的元素

    void insert( iterator loc, input_iterator start, input_iterator end ); //在指定位置loc前插入区间[start, end)的所有元素

  erase()  删除指定元素 

    iterator erase( iterator loc );//删除loc处的元素
    iterator erase( iterator start, iterator end );//删除start和end之间的元素

     vector <int>::iterator it;//声明一个迭代器
it = arr.begin();//指向第一个元素的迭代器
arr.erase(it);//删除指定位置的元素
// arr.erase(it,it+4);//删除某一区间的元素
for (int i=;i< arr.size();i++)
{
cout<<arr.at(i)<<"\t";// 返回指定位置的元素
}
cout<<endl;
it = arr.begin();
// arr.insert(it,0);//在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
arr.insert(it,,); //在指定位置it前插入3个值为99的元素
for (int i=;i< arr.size();i++)
{
cout<<arr.at(i)<<"\t";// 返回指定位置的元素
}

  reserve()  设置Vector最小的元素容纳数量 

  arr.reserve();//为当前vector预留至少共容纳size个元素的空间 

STL学习笔记1--vector的更多相关文章

  1. STL学习笔记(二) vector和string

    条款13:vector.string优先于动态分配数组 string是basic_string<char>的类型定义许多string的背后实现都采用了引用计数的技术,可以消除不必要的内存拷 ...

  2. 【stl学习笔记】vector

    vector是定义于namespace std内的template: namespace std { template<class T, class Allocator = allocator& ...

  3. Effective STL 学习笔记: 多用 vector & string

    Effective STL 学习笔记: 多用 vector & string 如果可能的话, 尽量避免自己去写动态分配的数组,转而使用 vector 和 string . 原书作者唯一想到的一 ...

  4. Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据

    Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...

  5. Effective STL 学习笔记 32 ~ 33

    Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  6. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  7. Effective STL 学习笔记 Item 30: 保证目标区间足够大

    Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...

  8. Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor

    Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...

  9. Effective STL 学习笔记: Item 22 ~ 24

    Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...

  10. 标准模板库(STL)学习探究之vector容器

    标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...

随机推荐

  1. 策略模式和php实现

    策略模式: 策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换.策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy). 策略模式 ...

  2. userBean-作用范围session

    package com.java1234.model; public class Student { private String name;private int age; public Strin ...

  3. VC 对话框设置背景颜色和图片

    改变背景颜色,有两种方法: 1.在app的初始化函数中调用:void SetDialogBkColor( COLORREF clrCtlBk = RGB(192, 192, 192), COLORRE ...

  4. uva 1601 poj 3523 Morning after holloween 万圣节后的早晨 (经典搜索,双向bfs+预处理优化+状态压缩位运算)

    这题数据大容易TLE 优化:预处理, 可以先枚举出5^3的状态然后判断合不合法,但是由于题目说了有很多墙壁,实际上没有那么多要转移的状态那么可以把底图抽出来,然后3个ghost在上面跑到时候就不必判断 ...

  5. Android(java)学习笔记112:Activity中的onCreate()方法分析

    1.onCreate( )方法是android应用程序中最常见的方法之一: 翻译过来就是说,onCreate()函数是在activity初始化的时候调用的,通常情况下,我们需要在onCreate()中 ...

  6. 正确配置Nginx+PHP

    对很多人而言,配置Nginx+PHP无外乎就是搜索一篇教程,然后拷贝粘贴.听上去似乎也没什么问题,可惜实际上网络上很多资料本身年久失修,漏洞百出,如果大家不求甚解,一味的拷贝粘贴,早晚有一天会为此付出 ...

  7. JSONPath - XPath for JSON

    http://goessner.net/articles/JsonPath/ [edit] [comment] [remove] |2007-02-21| e1 # JSONPath - XPath ...

  8. Python——for表达式

    一.for表达式 1.for表达式语法格式及用法 for表达式利用可迭代对象创建新的列表,for表达式也称为列表推导式,具体语法格式如下: [表达式 for 循环计数器 in 可迭代对象] 例: a ...

  9. 经常用到的js函数

    //获取样式 function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; }else{ retu ...

  10. 几种排序算法的比较转自http://blog.csdn.net/keenweiwei/article/details/3697452

    1冒泡排序: 已知一组无需数据a[1],a[2],a[3],a[4],a[5][a[n],将其按升序排列,首先找出这组数据中最大值,将a[1]与a[2]比较,若a[1]大,则交换两者的值,否则不变,在 ...