目录

  • 一、介绍
  • 二、声明及初始化
  • 三、方法
    • front
    • find
    • remove
    • erase
    • substr

一、介绍

向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。

在使用它时, 需要, #include<vector>

vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素。此外, vector 也提供了许多的方法来对自身进行操作。

二、声明及初始化

vector<int> a ;                                //声明一个int型向量a
vector<int> a() ; //声明一个初始大小为10的向量
vector<int> a(, ) ; //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a) ; //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值

使用数组进行初始化:

  int n[] = {, , , , } ;
vector<int> a(n, n+) ; //将数组n的前5个元素作为向量a的初值
vector<int> a(&n[], &n[]) ; //将n[1] - n[4]范围内的元素作为向量a的初值

向量元素的位置便成为遍历器, 同时, 向量元素的位置也是一种数据类型, 在向量中遍历器的类型为: vector<int>::iterator。 遍历器不但表示元素位置, 还可以再容器中前后移动。

 //全部输出
vector<int>::iterator t ;
for(t=a.begin(); t!=a.end(); t++)//t就是迭代器,表示元素位置,还可以前后移动
cout<<*t<<" " ;//*t为指针的间接访问形式,是访问t指向的元素值

三、基本操作

front

vec.font()

返回当前vector容器中起始元素的引用。

find

不同于map(map有find方法),vector本身是没有find这一方法,其find是依靠algorithm来实现的。

返回的是迭代器。

 vector<int>::iterator it = find(vec.begin(), vec.end(), );
if (it != vec.end())
cout<<*it<<endl;

从头到尾寻找值为6的元素,返回这个元素的指针。如果没有这个元素,就返回vec.end()。

remove

remove是STL里的通用算法。

std::remove(first,last,val);  

移除[first, last)范围内等于val的元素,只是将待删除元素之后的元素移动到前端,而不是删除。若要真正移除,需要搭配使用erase()。

在vector里面用就类似于

iter = std::remove(vec.begin(), vec.end(), val)

但这个函数只是把val移到vec的末尾,并不真正删除,真正删除还是要调用一次erase函数。

返回新的end()值(非val部分的end),但传入的原vector的end并没有发生改变,因此size也就没有变化

erase

iterator erase(iterator position);

iterator erase(iterator first, iterator last);

删除掉某个位置position或一段区域(begin, end)中的元素,减少其size,返回被删除元素下一个元素的位置。

一般remove和erase两者结合使用

删除vector中值为x的元素:

vec.erase(remove(vec.begin(),vec.end(),x),vec.end());

substr

 string s("12345asdf");
string a = s.substr(,); //获得字符串s中从第0位开始的长度为5的字符串

形式:

s.substr(pos,n)

返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size()-pos,即不加参数会默认拷贝整个s);

补充:若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾


a.size();   //获取向量中的元素个数

a.empty();   判断向量是否为空,返回true或false

a.clear();  把size(还有的元素个数)设置为0,capacity(分配的内存)不变。

a = b ;            //将b向量复制到a向量中

a == b ;    //a向量与b向量比较, 相等则返回1

a.insert(a.begin(), 1000);            //将1000插入到向量a的起始位置前

a.insert(a.begin(), 3, 1000) ;        //将1000分别插入到向量元素位置的0-2处(共3个元素)

 vector<int> a(, ) ;
vector<int> b() ;
b.insert(b.begin(), a.begin(), a.end()) ; //将a.begin(), a.end()之间的全部元素插入到b.begin()前

b.erase(b.begin()) ;                     //将起始位置的元素删除

b.erase(b.begin(), b.begin()+3) ;        //将(b.begin(), b.begin()+3)之间的元素删除

b.swap(a) ;            //a向量与b向量进行交换

vec.push_back(x);  //将x添加到末尾,vector长度自动增1

vec.pop_back();  //去掉数组最后一个数据

at()                得到编号位置的数据

begin()           得到数组头的指针

end()             得到数组的最后一个单元+1的指针

vec.front()        得到数组头的引用

back()            得到数组的最后一个单元的引用

max_size()     得到vector最大可以是多大

capacity()       当前vector分配的大小

resize()  改变当前使用数据的大小,如果它比当前使用的大,者填充默认值

reserve()      改变当前vecotr所分配空间的大小

erase()         删除指针指向的数据项

vec.rbegin()        将vector反转后的开始指针返回(其实就是原来的end-1)

vec.rend()        将vector反转构的结束指针返回(其实就是原来的begin-1)

二维

 vector< vector<int> (中间一定要有空格)> b(,vector<int>()); // 创建一个10x5的int二维向量,一定要有空格!!  > > 正确;>>错误!
vector<vector<int> > b;正确
vector<vector<int>> b;错误!
b[][] = ;//把5赋给[1][1]位置

c++11中列表初始化可以应用于vector 和 array数组。


at()成员函数

vector<int> a[] = {,,,,};
a.at() = ;//等同于a[3] = 66

使用at()时,将在运行期间捕获非法索引,而程序默认将中断。


容器————vector的更多相关文章

  1. C++线性序列容器<vector>简单总结

    C++线性序列容器<vector>简单总结 vector是一个长度可变的数组,使用的时候无须声明上限,随着元素的增加,Vector的长度会自动增加:Vector类提供额外的方法来增加.删除 ...

  2. [C++]STL容器Vector的内存释放

    直接抛出两句话,说明到底应该如何释放Vector占用的内存. “vector的clear不影响capacity,你应该swap一个空的vector.” <Effective STL>中的“ ...

  3. STL标准库-容器-vector

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性. 向量容器vector是一个动态数组,内存连续,它是动态分配内存,且每次扩张的原来的二倍. 他的结构如下 一 定义 vector ...

  4. C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用

    序列性容器::(vector和list和deque)   erase迭代器不仅使所有指向被删元素的迭代器失效,而且使被   删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方 式, ...

  5. 从零开始写STL—容器—vector

    从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...

  6. C++进阶 STL(1) 第一天 [容器,算法,迭代器] string容器 vector容器 deque容器

    课程大纲 02实现基本原理 容器,算法,迭代器 教室:容器 人:元素 教室对于楼:容器 序列式容器: 容器元素在容器中的位置是由进入容器的时间和地点来决定 序列式容器 关联式容器: 教室中 按年龄排座 ...

  7. 2.2 C语言_实现数据容器vector(排序功能)

    上一节我们说到我们己经实现了一般Vector可以做到的自动扩充,告诉随机存取,那么现在我们需要完成vector的一个排序的功能. 排序算法我们网上一百度哇~~!很常见的就有8大排序算法: 1.选择排序 ...

  8. C++ 顺序容器(vector,list、deque,stack,queue)

    顺序容器的种类有:vector,list.deque 顺序容器适配器: stack     //先进后出   栈 queue   //先进先出   队列 priority_queue   //也优先管 ...

  9. 向量容器vector操作

    1.向量容器vector 1.1 vector说明 进行vector操作前应添加头文件#include<vector>: vector是向量类型,可以容纳许多类型的数据,因此也被称为容器: ...

  10. STL之序列容器vector

    首先来看看vector的模板声明: template <class T, class Alloc = allocator<T>> class vector { //… }; v ...

随机推荐

  1. day40—JavaScript多物体运动框架

    转行学开发,代码100天——2018-04-25 今天继续学习JavaScript的运动实现——多物体运动框架的介绍及其应用. 首先来看一个简单的例子.如下图,要使图中3个红色盒子实现鼠标移入变宽,移 ...

  2. 怎样用idhttpserver代替IIS让用户浏览html或下载文件 http://bbs.csdn.net/topics/360248674

      怎样用idhttpserver代替IIS让用户浏览html或下载文件 更多0分享到: 相关知识库: C# 虚拟现实(VR) Node.js 算法与数据结构     对我有用[0] 丢个板砖[0]  ...

  3. Bootstrap 学习笔记11 按钮和折叠插件

     复选框: <div class="btn-group" data-toggle="buttons"> <label for="se ...

  4. APT攻防整理-攻击方法/工具

    攻击步骤 一般步骤 社工 武器制造 武器投递 漏洞利用 安装后门 后渗透 这5个阶段攻击非常隐蔽,可绕过传统安全设备检测 潜伏控制 传统通信方式不会使用,如cc/socket/http(可采用安全隧道 ...

  5. < python PIL - 批量图像处理 - 生成自定义大小图像 >

    < python PIL - 批量图像处理 - 生成自定义大小图像 > 直接用python自带的PIL图像库,对一个文件夹下所有jpg/png的图像进行自定义像素变换 from PIL i ...

  6. stl应用(map)或字典树(有点东西)

    M - Violet Snow Gym - 101350M Every year, an elephant qualifies to the Arab Collegiate Programming C ...

  7. python 分析 知乎粉丝数据

    昨天花了一下午写了一个小爬虫,用来分析自己的粉丝数据.这个真好玩!今天帮了群里好多大V也爬了他们的数据.运行速度:每分钟5千粉丝以上.暂时先写成这样,这两天要准备补考,没有时间继续玩这个. 下次要改进 ...

  8. 【java】jstack分析查看线程状态

    演示代码 public class StackTest { public static void main(String[] args) { Thread thread = new Thread(ne ...

  9. direct模式下的收发

    生产者 import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters( host='loc ...

  10. NGUI的anchors属性的使用

    一,anchors锚点 我们需要明白target目标的使用,这时是你下面使用left,right,bottom和top的距离,比如我们使用目标为UI Root,这个就是摄像机的视野,所以,我们使用an ...