STL vector
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相关推荐
- C++ stl vector介绍
转自: STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if ...
- STL vector的几种清空容器(删除)办法
1.为什么需要主动释放vector内存 来自 <https://blog.csdn.net/hellokandy/article/details/78500067> vector其中一个特 ...
- STL vector 容器介绍
介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...
- STL vector的erase操作问题
STL vector的erase操作问题 一老大说CSDN上有篇博文("关于STL vector的erase操作",地址是:http://blog.csdn.net/tingya/ ...
- STL vector容器
介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用. ...
- 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 ...
- stl vector 函数_vector :: at()函数以及C ++ STL中的示例
stl vector 函数 C ++ vector :: at()函数 (C++ vector::at() function) vector::at() is a library function o ...
- stl vector 函数_vector :: crend()函数以及C ++ STL中的示例
stl vector 函数 C ++ vector :: crend()函数 (C++ vector::crend() function) vector::crend() is a library f ...
- stl vector 函数_vector :: pop_back()函数以及C ++ STL中的示例
stl vector 函数 C ++ vector :: pop_back()函数 (C++ vector::pop_back() function) vector::pop_back() is a ...
- stl vector 函数_vector :: push_back()函数,以及C ++ STL中的示例
stl vector 函数 C ++ vector :: push_back()函数 (C++ vector::push_back() function) vector::push_back() is ...
最新文章
- Python使用matplotlib可视化散点图、并在可视化图像的底部和右边添加边缘箱图(Marginal Boxplot)
- js实现表格的增删改查
- 资深首席架构师眼中的架构应该是怎样的?【转】
- vue前端用服务器上路径的图片展示_5分钟教你用nodeJS手写一个mock数据服务器
- Linux系统目录结构,文件类型以及ls、alias命令
- PHP下解决Cannot find module (IP-MIB)的问题
- 思维导图xmind学习记录
- Kernel那些事儿之内存管理(2) --- 百闻不如一见
- 2012暑假最后两次组队赛总结
- MongoDb连接表的查询
- 人人都是 DBA(XI)I/O 信息收集脚本汇编(转)
- java中的check函数_java中checked和unchecked 异常处理
- 学校计算机房主机系统,学校机房电脑系统恢复的方法
- 【进销存管理系统——开题报告 分享(仅供参考呀)】
- 美国电影超短200句(看英文原版电影很有用的!)(转)
- java编程第七周作业
- 日志收集系统Flume笔记(基础版)
- c语言sub函数是什么,用$Super$$和$Sub$$对函数进行重定义
- 谈谈如何快速掌握一般性的IT知识点
- 微内核是什么?宏内核是什么?一文带你了解操作系统内核架构!
热门文章
- 1012 The Best Rank
- oracle time格式化比较,ORACLE DATE和TIMESTAMP数据类型的比较(二) (转)
- Flask基础-(模板)
- 第 7 章 项目运作
- NginxApachePHP参数汇总
- 构建安全的 ASP.NET 应用程序
- Scala 深入浅出实战经典 第88讲:Scala中使用For表达式实现map、flatMap、filter
- memcached图形界面的监控
- 远程为服务器安装Windows 2008 Server
- java创建临时文件夹_如何在Java中创建一个临时目录/文件夹?