我是靠谱客的博主 整齐服饰,最近开发中收集的这篇文章主要介绍C++vector容器无敌详细,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

c++学习(复习)之路
(大佬跳过)很多小伙伴跟我一样吧,在学习c++的过程中没有系统的学习或者说学了忘了(用c++更多的是觉得STL很方便提供了许多封装好的容器与函数更便于参加比赛)

这篇文章便是我学习vector容器的总结:
使用vector容器的头文件是#include< vector >

vector概念:
vector容器常被成为向量容器(据说是线性代数中的一维数组就是叫做向量)

vector是一个动态大小数组的顺序容器,可以认为vector是存放任意类型的动态数组

vector的特性:
顺序序列:vector容器是按照严格的线性序列排序

动态数组:vector容器支持对序列中元素快速访问元素通过下标的方式,也可在首尾快速的删除或增加元素,当vector的元素数量超过他的容量时,容量会增倍(vetcor.capacity());

vector构造函数
vetcor():创建一个空的vector容器。

vector(int n):创建一个size()为n的vector容器,元素值为0。

vector(int n,const T& t):创建一个size()为n的vector容器且每个元素值为t。

vector(const vector&):复制另一个vector容器内容到该容器中

vector(begin,end):复制一个数组区间为 [begin,end)(注意是左开右闭) 的值到vector中

样例:

#include <iostream>
#include <vector>
using namespace std;
int main(){
int s[3]={1,2,3};
vector<int> temp(3);
//temp容器元素为0,0,0
vector<int> p(5,3);
//p容器元素为3,3,3,3,3
vector<int> q(p);
//q容器元素为3,3,3,3,3
vector<int> tmp(s,s+3);
//tmp容器元素为1,2,3
return 0;
}

vector增加函数:
void push_back(const T& t):往vector容器最后一个元素位置后添加元素t。

iterator insert(iterator iter,const T& t):往iter迭代器指向元素添加元素t。

iterator insert(iterator iter,int n,const T& t):往iter迭代器指向元素添加n个值为t的元素。

iterator insert(iterator iter,iterator first,iterator last):往iter迭代器指向元素插入另一个相同类型vector容器的 [first,last) 间的元素。

iterator emplace (const_iterator position, Args&&… args);往position迭代器指定位置前插入一个元素,并返回当前位置。(c++11新增函数)

void emplace_back (Args&&… args);往vector容器后插入一个元素,效率高于push_back()函数。

注:vector容器中没有push_front()函数

样例:

#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> s(2,4);
vector<int> p;
p.push_back(1);
//p容器内元素为1
p.insert(p.begin(),2);
//p容器内元素为2,1;
p.insert(p.end(),2,3);
//因为end()是指最后一个元素再下一个位置 p容器内元素为2,1,3,3;
p.insert(p.begin(),s.begin(),s.end());
//p容器值为4,4,2,1,3,3
return 0;
}

vector删除函数:
void pop_back():删除容器最后一个元素。

iterator erase(iterator iter):删除iter位置的元素。

iterator erase(iterator first,iterator last):删除容器内[first,last)的元素。

iterator clear():清除容器内所有元素。

注:很多同学在使用迭代器遍历vector删除指定元素时,会出现野指针问题,原因在于erase(iterator iter)删除一个元素时会返回下一个元素的迭代器,而再++iter,则会出现指针指向错误,删除最后一个元素是返回end(),此时在++会出现段错误。

样例:

#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> s(2,4);
s.push_back(1);
s.push_back(3);
s.push_back(2);
vector<int>::iterator iter=s.begin();
//遍历+删除指定元素正确用法
while(iter!=s.end()){
if(*iter==5)
s.erase(iter);
else iter++;
}
s.pop_back();
//s容器内元素为4,4,1,3
s.erase(s.begin());
//s容器内元素为4,1,3
s.erase(s.begin(),s.end());
//s容器为空
s.push_back(1);
s.clear();
//s容器为空
return 0;
}

vector遍历函数:
at(int pos) :返回pos位置处元素的引用,如果超出范围会返回异常错误,所以相对于[]更安全。

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

back():返回尾元素的应用

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

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

reverse_iterator rbegin():反向迭代器,指向最后一个元素

reverse_iterator rend():反向迭代器,指向第一个元素之前的位置
注:反向迭代器与正向迭代器声明时不同需要改为reverse_iterator
样例:

#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> s(2,4);
s.push_back(1);
s.push_back(3);
s.push_back(2);
vector<int>::iterator iter1=s.begin();
while(iter1!=s.end()){
cout << *iter1;
iter1++;
}
//输出为4,4,1,3,2
vector<int>::reverse_iterator iter2=s.rbegin();
while(iter2!=s.rend()){
cout << *iter2;
iter2++;
}
//输出为2,3,1,4,4
return 0;
}

vector关于元素数量函数

void reserve (size_type n):申请n个元素个数的内存空间,一次性分配效率较高.

int size():返回vector容器元素个数。

int capacity():返回vector容器容量。

resize():设置vector容器大小。

bool empty():判断vector容器是否为空,为空返回true,否则返回false。

注:当vector内元素超过开始设定的size()大小,vector的容量会翻倍增加(1->2,2->4…)

样例:

#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> s;
s.resize(5);
cout <<s.size();
//输出size()为5
for(int i=0;i<s.size();i++)
s[i]=i;
cout << s.capacity();
//s的容量为5
s.push_back(1);
cout << s.capacity();
//s的容量为10
cout << s.empty();
//输出为0,flase
s.clear();
cout << s.empty();
//输出为1,true
return 0;
}

vector其他函数:

void swap(vector&):交换两个同类型向量的数据

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

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

样例:

#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> s(5,2);
vector<int> p(4,3);
s.swap(p);
//s容器内元素为3,3,3,3 p容器内元素为2,2,2,2,2
s.assign(2,1);
//s容器内元素为1,1,3,3
p.assign(s.begin(),s.end());
//p容器内元素为1,1,3,3
return 0;
}

大概vector常用的函数就总结到此吧,如果有什么错误请指出,谢谢啦各位,如果有帮助的留下你们的小赞支持一下啦.不忘初心,方得始终

最后

以上就是整齐服饰为你收集整理的C++vector容器无敌详细的全部内容,希望文章能够帮你解决C++vector容器无敌详细所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部