目录

介绍

1 创建

2 容量和大小

  size()

  capacity()

3 resize()

4 reverse()

5 获取元素

  front()

  back()

6 迭代器(待补充)

7 push_back()

8 emplace_back()

9 emplace()(待补充)

10 insert()

11 clear()

12 remove()

13 pop_back()

14 shrink_to_fit()

15 erase()

16 substr()

介绍

和 array<T,N> 容器相似,不同的是 vector<T> 容器的大小可以自动增长。在大多数时候,都可以用 vector<T> 代替数组存放元素。只要能够意识到,vector<T> 在扩展容量,以 及在序列内部删除或添加元素时会产生一些开销;但大多数情况下,代码不会明显变慢。

为了使用 vector<T> 容器模板,需要在代码中包含头文件 vector。

1 创建

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的初值

2 容量和大小

vector 的容量大小,是指在不分配更多内存的情况下可以保存的最多元素个数,vector 的大小是它实际所包含的元素个数,也就是有值的元素的个数。

vector 的大小不能超出它的容董。当大小等于容量时,增加一个元素就会导致更多内存的分配。

(1)size()

返回大小,无符号整型值

(2)capacity()

返回容量,无符号整型值

3 resize()

改变容器大小。

std::vector<int> values {,,};
values.resize ();
//把元素的个数变为参数指定的值,所以会增加两个用默认值初始化的元素。
//如果添加了一个元素,导致超过当前容器的容景,容量会自动增加。 values.resize (, );
//将容器大小设为7,并用99来初始化新增的元素
//若7<原来的容器大小,那么就删除多余的元素

4 reverse()

改变容器容量(元素个数,整型)。

5 获取元素

使用下标索引[]

(1)front

返回第一个元素的引用

(2)back

返回最后一个元素的引用

因为成员函数 front() 和 back() 返回的是引用,所以它们可以出现在赋值运算符的左边。

values.front() = 2.71828;

6 迭代器

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

7 push_back()

8 emplace_back()

emplace_back() 的参数正是添加到容器中的对象的构造函数所需要的参数。

emplace_back() 用它的参数作为构造函数的参数,在容器中生成对象。如果不想使用移动运算,使用 push_back()。

可以在 emplace_back() 函数中使用尽可能多的参数,只要它们满足对象构造函数的要求。这里有一个使用多参数的 emplace_back() 的示例:

std::string str {"alleged"};
words.emplace_back(str, , );
//生成一个string对象(alleged的索引2开始的三个元素组成):leg,然后将leg添加到words字符串后面

9 emplace()

通过使用成员函数 emplace(),可以在 vector 序列中插入新的元素。对象会在容器中直接生成,而不是先单独生成对象,然后再把它作为参数传入。

10 insert()

11 clear()

std::vector<int> data(, );// Contains 100 elements initialized to 99
data.clear(); // Remove all elements

移除了所有的元素,因此大小变为 0,因为这个操作并没有改变容器的容量,所以容量还是 100。

12 remove()

remove() 算法由定义在 algorithm 头文件中的模板生成。

vector<int>::iterator iter = std::remove(vec.begin(), vec.end(), val)

只是把val移到vec的末尾,并不真正删除,真正删除还是要调用一次erase函数。返回新的end()值(非val部分的end),但传入的原vector的end并没有发生改变,因此size也就没有变化

13 pop_back()

14 shrink_to_fit()

去掉容器中多余的容量,例如不再向容器中添加新元素。

data.shrink_to_fit();

15 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());

16 substr()

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的末尾

序列式容器————vector的更多相关文章

  1. vector是序列式容器而set是关联式容器。set包含0个或多个不重复不排序的元素。

    1.vector是序列式容器而set是关联式容器.set包含0个或多个不重复不排序的元素.也就是说set能够保证它里面所有的元素都是不重复的.另外对set容器进行插入时可以指定插入位置或者不指定插入位 ...

  2. STL源码剖析——序列式容器#1 Vector

    在学完了Allocator.Iterator和Traits编程之后,我们终于可以进入STL的容器内部一探究竟了.STL的容器分为序列式容器和关联式容器,何为序列式容器呢?就是容器内的元素是可序的,但未 ...

  3. STL源码剖析读书笔记--第四章--序列式容器

    1.什么是序列式容器?什么是关联式容器? 书上给出的解释是,序列式容器中的元素是可序的(可理解为可以按序索引,不管这个索引是像数组一样的随机索引,还是像链表一样的顺序索引),但是元素值在索引顺序的方向 ...

  4. STL源码剖析之序列式容器

    最近由于找工作需要,准备深入学习一下STL源码,我看的是侯捷所著的<STL源码剖析>.之所以看这本书主要是由于我过去曾经接触过一些台湾人,我一直觉得台湾人非常不错(这里不涉及任何政治,仅限 ...

  5. 7.5 C++基本序列式容器

    参考:http://www.weixueyuan.net/view/6402.html 总结: vector可以理解为可以在两端插入.删除数据的数组,它提供了丰富的成员函数,用于操作数据. begin ...

  6. STL序列式容器学习总结

    STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...

  7. STL——序列式容器

    一.容器概述与分类 1. STL容器即是将运用最广的一些数据结构实现出来.常用的数据结构有array, list, tree, stack, queue, hash table, set, map…… ...

  8. STL学习笔记(序列式容器)

    Vector Vector是一个动态数组. 1.Vector的操作函数 构造.拷贝和析构 vector<Elem> c //产生一个空vector ,其中没有任何元素 vector< ...

  9. 数据结构-STL序列式容器总结

    根据序列在容器中的排列特性,将常见数据结构分为:序列式容器和关联式容器. 常见序列式容器有 1.array(build-in)c++內建 2.vector 3.heap(以算法方式呈现) 4.prio ...

随机推荐

  1. Windows 下 C/C++ 多线程编程入门参考范例

    #include <windows.h> #include <iostream> using namespace std; DWORD WINAPI myThread(LPVO ...

  2. tableau分布式添加节点

    参考: 两节点的安装:https://zhuanlan.zhihu.com/p/44732932https://help.tableau.com/current/server-linux/zh-cn/ ...

  3. CentOS7之ssh-Xshell密钥认证登陆

    操作系统版本:CentOS Linux release 7.2.1511 (Core)   SSH版本:OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 1.打开Xshell工 ...

  4. [转帖]VMWare官网:无法关闭 ESXi 主机上的虚拟机 (1014165)

    无法关闭 ESXi 主机上的虚拟机 (1014165) https://kb.vmware.com/s/article/1014165?lang=zh_CN Last Updated: 4/17/20 ...

  5. 小记---------spark组件与其他组件的比较 spark/mapreduce ;spark sql/hive ; spark streaming/storm

    Spark与Hadoop的对比   Scala是Spark的主要编程语言,但Spark还支持Java.Python.R作为编程语言 Hadoop的编程语言是Java    

  6. 使用Koa.js离不开这十个中间件

    随着ES6的普及,async/await的语法受到更多JS开发者的青睐,Koa.js作为比较早支持使用该语法的Node框架越来越受到大家的喜爱,虽然Koa.js本身支持的功能很有限,但官方和社区提供了 ...

  7. Java Web开发技术教程入门-静态网页技术

        昨天了解了构建动态网站的几种技术:Servlet技术.JSP技术,ASP技术和ASP.NET技术以及PHP技术.昨天的精髓在于JSP技术的运行原理:通过用户请求JSP文件,首先检查JSP文件的 ...

  8. Deepin安装 ruby 包管理工具 RVM(适用于 Debian 系列)

    1. 安装 GPG keys 先安装 gpg2 工具 sudo apt install gnupg2 再安装 keys gpg2 --recv-keys 409B6B1796C275462A17031 ...

  9. jse中将数据反转

    public class test { public static void main(String args[]){ String arr[]={"1","2" ...

  10. httpClient4.5.2工具类总结

    使用背景: 因项目使用非结构化存储,http相关jar包统一升级到httpClient4.5.2,查阅相关文档总结如下,以咨分享,望不吝指教. 依赖jar包 httpclient-4.5.2.jar. ...