概述
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容器无敌详细所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复