首页 > 作文

带你了解C++中vector的用法

更新时间:2023-04-04 14:39:05 阅读: 评论:0

目录
一,什么是vector二,容器特性1,顺序序列2,动态数组3,能够感知内存分配器三,常用基本函数实现四,基本用法1,头文件2,创建和使用3,算法五,vector占用内存空间问题1,vector内存自增长2,vector内存释放六,疑问解答1,vector与数组的区别2,c+商业广告设计+11关于vector的新增特性有:总结

一,什么是vector

vector(向量)是一个封装了动态大小数组的顺序容器。能够存放各种类型的对象(注:一个容器中所有对象必须是同一种类型的)。可认为vector是一个能够存放任意类型的动态数组,可添加和删除数据(因为动态,所以相比数组节省空间)。

c++ primer的作者说到,在实际的编程中,我们作为程序员应该避免用到低级数组和指针,而更应该多用高级的vector和迭代器。

二,容器特性

1,顺序序列

顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。

2,动态数组

支持对序列中的任意元素进行快速直接访问,可通过指针进行该操作。提供在序列末尾增加/删除元素的操作。

3,能够感知内存分配器

容器使用一个内存分配器对象来动态地处理它的存储需求。

三,常用基本函数实现

vector(): 构造函数,创建一个空vector

vector(int 三峡大坝位置nsize): 创建一个vector,元素个数为nsize

vector(int nsize,const t& t): 创建一个vector,元素个数为nsize,且值均为t

vector(begin,end): 复制[begin,end)区间内另一个数组的元素到vector中

~vector(): 析构函数,销毁容器对象并回收所有分配内存

void push_back(const t& x): 向量尾部增加一个元素x

iterator inrt(iterator it,const t& x): 向量中迭代器指向元素前增加一个元素x

iterator inrt(iterator it,int n,const t& x): 向量中迭代器指向元素前增加n个相同的元素x

iterator inrt(iterator it,const_iterator first,const_iterator last): 向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据

iterator era(iterator it): 删除向量中迭代器指向元素

iterator era(iterator first,iterator last): 删除向量中[first,last)中元素

void pop_back(): 删除向量中最后一个元素

void clear(): 清空向量中所有元素,即size值全部为0,但存储空间没有改变(释放)

reference at(int pos): 返回pos位置元素的引用

reference front(): 返回首元素的引用

reference back(): 返回尾元素的引用

iterator begin(): 返回向量头指针,指向第一个元素

iterator end(): 返回向量尾指针,指向向量最后一个元素的下一个位置

bool empty() const: 判断向量是否为空,若为空,则向量中无元素

int size() const: 返回向量中元素的个数

int capacity() const: 返回当前向量所能容纳的最大元素值

int max_size() const: 返回最大可允许的vector元素数量值

void swap(vector&): 交换两个同类型向量的数据,交换两个容器内容,涉及存储空间分配问题

void assign(int n,const t& x): 设置向量中前n个元素的值为x

void assign(const_iterator first,const_iterator last): 向量中[first,last)中元素设置成当前向量元素

四,基本用法

1,头文件

vector是c++标准库stl中的数据结构,因此要使用vector,需要在程序头添加:

#include <vector>using namespace std;

2,创建和使用

创建vector对象

//创建一个普通一维动态数组vector<int> vec至尊宝纺;//创建一个二维动态数组vector<vector<int>> vec2;//尾部插入数字:vec.push_back(1);//尾部删除数字:vec.pop_back();//使用下标访问数组,下标从0开始cout<<vec[0]<<endl;//使用迭代器访问元素vector<int>::iterator it;for(it = vec.begin();it != vec.end();it++){cout<< *it <<endl;}//插入元素vec.inrt(vec.begin()+i,a);//删除元素vec.era(vec.begin()+i);vec.era(vec.begin()+i,vec.end()+j);//向量大小:vec.size();//清空向量:vec.clear();

vector的元素可以是int,double,string,结构体,注意:结构体要定义为全局的,否则会出错。

3,算法

(1) 使用rever将元素翻转:

// 需要头文件 #include <algorithm>rever(vec.begin(),vec.end());

(2)使用 sort 排序:

// 需要头文件#include<algorithm>,sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).

五,vector占用内存空间问题

1火灾无情,vector内存自增长

与其他容器不同,其内存空间只会增长,不会减小。

为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。

因此stl实现者在对vector进行内存分配时,其实际分配的容量要比当前所需的空间多一些。就是说,vector容器预留了一些额外的存储区,用于存放新添加的元素,这样就不必为每个新元素重新分配整个容器的内存空间。

每当vector容器不得不分配新的存储空间时,会以加倍当前容量的分配策略实现重新分配。

2,vector内存释放

所有内存空间是在vector析构时候才能被系统回收。empty()用来检测容器是否为空的,clear()可以清空所有元素,但无法释放内存。如果需要空间动态缩小,可以考虑使用deque或者使用其他容器。

六,疑问解答

1,vector与数组的区别

相同点:

都是可以对同一种类型数据进行存储

都可以用迭代器操作

都可以通过下标进行数据处理

不同点:

vector动态长度,可通过push_back和pop_back方法增加和缩短长度;数组长度在定义时已经确定,不可更改

vector的下标必须是无符号数;数组下标可以是有符号数

2,c++11关于vector的新增特性有:

a.cbegin();    // 返回指向容器中第一个元素的const_iteratora.cend();      // 返回指向容器中最后一个元素的const_iteratora.crbegin();   // 反转迭代器, 返回指向容器中最后一个元素的const_iteratora.crend();     // 反转迭代器, 返回指向容器中第一个元素的const_iteratora.emplace();   // 类似inrt功能,但比它更有效率a.emplace_back(); //类似push_back, 但比它更有效率

总结

到此这篇关于带你了解c++中vector的用法的文章就介绍到这了,更多相关c++ vecto春天的颜色r用法内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 14:39:04,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/ceb04e6afa56ca642c3dd8bdc34f62c3.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:带你了解C++中vector的用法.doc

本文 PDF 下载地址:带你了解C++中vector的用法.pdf

标签:元素   向量   容器   数组
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图