1、vector是表示可变大小数组的序列容器。·

2、就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。

3、本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。

4、vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。对于其它不在末尾的删除和插入操作,效率更低。

5、因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。

基本操作

vector<int> v1;

v1.push_back()   //在数组的最后添加一个数据

v1.pop_back()    //去掉数组的最后一个数据

v1.front()     //返回第一个元素(栈顶元素)

v1.begin()           //得到数组头的指针,用迭代器接受

v1.end()             //得到数组的最后一个单元+1的指针,用迭代器接受v1.clear()        // 移除容器中所有数据

v1.empty()         //判断容器是否为空

v1.erase(pos)        //删除pos位置的数据(迭代器)

v1.erase(beg,end)// 删除[beg,end)区间的数据

v1.size()         //回容器中实际数据的个数

v1.insert(pos,data) //在pos处插入数据

#include <iostream>
#include <vector>using namespace std;int main ()
{vector<int> v; vector<int>::iterator it;int i;//在末尾添加 v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(3); cout << "第一个元素是 :" << v.front() << endl;cout << "第一个元素是:" << *(v.begin()) << endl;//删除操作(迭代器) for(it=v.begin();it!=v.end();){if(*it==3){v.erase(it);//删除值为3 }   elseit++;} cout << "删除后 vector里的元素个数" << v.size() << endl;//遍历1 for(i=0;i<v.size();i++){cout << v[i] << " ";} cout << endl;//遍历2 for(it=v.begin();it!=v.end();it++){cout << *it << " ";}return 0;
}

删除操作

#include <iostream>
#include <vector>using namespace std;int main ()
{vector<int> v; vector<int>::iterator it;int i;for(i=1;i<=10;i++){v.push_back(i);} v.erase(v.begin()+1);//删除下标为1的元素 1 3 4 5 6 7 8 9 10 v.erase(v.begin(),v.begin()+4);//删除下标为0,以及之后的三个元素(总共四个元素) 6 7 8 9 10 //v.erase(v.begin(),v.end());//删除全部元素 cout << "v里的元素个数" << v.size() << endl;//遍历1  for(i=0;i<v.size();i++){cout << v[i] << " ";} cout << endl;return 0;
}

注意find不属于vector的成员,而存在于算法中,应加上头文件#include <algorithm>

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main ()
{vector<int> v; vector<int>::iterator it;int i;for(i=1;i<=10;i++){v.push_back(i);} it = find(v.begin(),v.end(),15);//第三个参数是要查找的数 //查找成功返回一个指向指定元素的迭代器,查找失败返回end迭代器。 if(it!=v.end())cout << "YES";elsecout << "NO";return 0;
}

排序,sort(结构体的话,可以自己写cmp函数)默认的是从小到大

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;bool cmp(int a,int b)
{return a>b;
}int main ()
{vector<int> v; vector<int>::iterator it;v.push_back(89);v.push_back(1);v.push_back(50);sort(v.begin(),v.end(),cmp);for(int i=0;i<v.size();i++)cout << v[i] << " "; return 0;
}

也可以直接

sort(v.begin(),v.end(),greater<int>() );//从大到小 

STL vector相关推荐

  1. C++ stl vector介绍

    转自: STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if ...

  2. STL vector的几种清空容器(删除)办法

    1.为什么需要主动释放vector内存 来自 <https://blog.csdn.net/hellokandy/article/details/78500067> vector其中一个特 ...

  3. STL vector 容器介绍

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  4. STL vector的erase操作问题

    STL vector的erase操作问题 一老大说CSDN上有篇博文("关于STL vector的erase操作",地址是:http://blog.csdn.net/tingya/ ...

  5. STL vector容器

    介绍  这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用. ...

  6. stl vector 函数_在C ++ STL中使用vector :: begin()和vector :: end()函数打印矢量的所有元素...

    stl vector 函数 打印向量的所有元素 (Printing all elements of a vector) To print all elements of a vector, we ca ...

  7. stl vector 函数_vector :: at()函数以及C ++ STL中的示例

    stl vector 函数 C ++ vector :: at()函数 (C++ vector::at() function) vector::at() is a library function o ...

  8. stl vector 函数_vector :: crend()函数以及C ++ STL中的示例

    stl vector 函数 C ++ vector :: crend()函数 (C++ vector::crend() function) vector::crend() is a library f ...

  9. stl vector 函数_vector :: pop_back()函数以及C ++ STL中的示例

    stl vector 函数 C ++ vector :: pop_back()函数 (C++ vector::pop_back() function) vector::pop_back() is a ...

  10. stl vector 函数_vector :: push_back()函数,以及C ++ STL中的示例

    stl vector 函数 C ++ vector :: push_back()函数 (C++ vector::push_back() function) vector::push_back() is ...

最新文章

  1. Python使用matplotlib可视化散点图、并在可视化图像的底部和右边添加边缘箱图(Marginal Boxplot)
  2. js实现表格的增删改查
  3. 资深首席架构师眼中的架构应该是怎样的?【转】
  4. vue前端用服务器上路径的图片展示_5分钟教你用nodeJS手写一个mock数据服务器
  5. Linux系统目录结构,文件类型以及ls、alias命令
  6. PHP下解决Cannot find module (IP-MIB)的问题
  7. 思维导图xmind学习记录
  8. Kernel那些事儿之内存管理(2) --- 百闻不如一见
  9. 2012暑假最后两次组队赛总结
  10. MongoDb连接表的查询
  11. 人人都是 DBA(XI)I/O 信息收集脚本汇编(转)
  12. java中的check函数_java中checked和unchecked 异常处理
  13. 学校计算机房主机系统,学校机房电脑系统恢复的方法
  14. 【进销存管理系统——开题报告 分享(仅供参考呀)】
  15. 美国电影超短200句(看英文原版电影很有用的!)(转)
  16. java编程第七周作业
  17. 日志收集系统Flume笔记(基础版)
  18. c语言sub函数是什么,用$Super$$和$Sub$$对函数进行重定义
  19. 谈谈如何快速掌握一般性的IT知识点
  20. 微内核是什么?宏内核是什么?一文带你了解操作系统内核架构!

热门文章

  1. 1012 The Best Rank
  2. oracle time格式化比较,ORACLE DATE和TIMESTAMP数据类型的比较(二) (转)
  3. Flask基础-(模板)
  4. 第 7 章 项目运作
  5. NginxApachePHP参数汇总
  6. 构建安全的 ASP.NET 应用程序
  7. Scala 深入浅出实战经典 第88讲:Scala中使用For表达式实现map、flatMap、filter
  8. memcached图形界面的监控
  9. 远程为服务器安装Windows 2008 Server
  10. java创建临时文件夹_如何在Java中创建一个临时目录/文件夹?