目录

  • 一、介绍
  • 二、声明及初始化
  • 三、方法
    • 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. import的项目结构不对

    问题如下,在我们新导入一个maven项目时,碰到这样的目录结构,总有点别扭,而且在运行Tomcat的时候,突然发现build i选项下面少了两个我们经常使用的两个选项 window  --Perspe ...

  2. 机器学习实战笔记-5-Logistic回归

    Logistic回归 优缺点 适用范围 优点:计算代价不高,易于理解和实现. 缺点:容易欠拟合,分类精度可能不高. 适用于:数值型和标称型数据. 仅用于二分类 原理: 每个特征都乘以一个回归系数> ...

  3. SQL查询返回去除重复数据的结果集

    方法一: select * from  tablename  where  id   in   (select  id  from  tablename   group  by  id   havin ...

  4. JSP基础--九大内置对象

    JSP九大内置对象 Object findAttribute(String name):依次在page.request.session.application范围查找名称为name的数据,如果找到就停 ...

  5. Linux中ssh及scp的连接

    1. 当你想获取另外一台电脑上的数据时,可以使用这个命令 scp -P 10022 root@172.30.83.173:~/ubuntu1.tar ./ -r   代表传输文件夹,直接传文件可以不加 ...

  6. 炫酷CSS3加载动画

    <!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8&qu ...

  7. 自定义ThreadLocal和事务(基于自定义AOP)

    参考<架构探险--从零开始写javaweb框架>4.6章节 自定义ThreadLocal package smart; import java.util.Collections; impo ...

  8. Spring学习笔记(3)——快速入门

    项目目录如下: Say.java为主函数通过ApplicationContext创建对象,利用方法ClassPathXmlApplicationContext访问配置文件Applicationcont ...

  9. 攻防世界--no-strings-attached

    测试文件:https://adworld.xctf.org.cn/media/task/attachments/5d4117b968684b9483d0d4464e0a6fea 这道题要使用到gdb文 ...

  10. ApacheHttpServer出现启动报错:the requested operation has failed解决办法

    转自:https://www.jb51.net/article/21004.htm 原因一:80端口占用 例如IIS,另外就是迅雷.我的apache服务器就是被迅雷害得无法启用! 原因二:软件冲突 装 ...