标签:允许 fun 一个 bubuko 个数 迭代器 reverse ima 向量
模板类vector是一个封装了动态大小数组的顺序容器,它所控制的序列是以连续数组的方式存储的。跟任意其它类型容器一样,它能够存放各种类型的对象。
包含头文件#include <vector> 声明命名空间using namespace std;
特性:
1)顺序序列:容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。
2)动态数组:支持对序列中的任意元素进行快速直接访问。操供了在序列末尾相对快速地添加/删除元素的操作。
3)能够感知内存分配器的(Allocator-aware):容器使用一个内存分配器对象来动态地处理它的存储需求。
使用方法:
1)构造函数
vector(); //创建一个空的vector 如:vector<int> a;
vector(int nSize); //创建一个空的vector,元素个数为nSize 如:vector<int> a(10);
vector(int nSize,const T& val); //创建一个vector,元素个数为nSize,且值都为val 如:vector<string> a(5,"have fun");
vector(const vector&); //拷贝(复制)构造函数
如:vector<string> a(5,"have fun");
vector<string> b(a);
vector(begin,end); //复制另一个数组[begin,end)区间内的元素到vector中
如:int ia[6] = { -2, -1, 0, 1, 2, 1024 };
vector<
int
> a(ia,ia+6);
2)插值函数
void push_back(const T& x); //向量尾部增加一个元素X
如: vector<string> a(5,"have fun");
a.push_back("good luck");
for(int i=0;i<a.size();i++)
{
cout<<a[i]<<endl;
}
程序输出:
iterator insert(iterator it,const T& x); //向量中迭代器指向元素前增加一个元素x
如: vector<string> a(5,"have fun");
a.insert(a.begin()+2,"good luck");
for(int i=0;i<a.size();i++)
{
cout<<a[i]<<endl;
}
程序输出:
iterator insert(iterator it,int n,const T& x); //向量中迭代器指向元素前增加n个相同的元素x
如: vector<string> a(5,"have fun");
a.insert(a.begin()+2,2,"good luck");
for(int i=0;i<a.size();i++)
{
cout<<a[i]<<endl;
}
程序输出:
iterator insert(iterator it,const_iterator first,const_iterator last); //向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
如: vector<string> a(5,"have fun");
vector<string> b(2,"good luck");
a.insert(a.begin()+2,b.begin(),b.end());
for(int i=0;i<a.size();i++)
{
cout<<a[i]<<endl;
}
程序输出:
3)删除函数
iterator erase(iterator it); //删除向量中迭代器指向元素;
如: string str[7] = {"have fun","have fun","good luck","good luck","have fun","have fun","have fun"};
vector<string> a(str,str+7);
a.erase(a.begin()+2);
for(int i=0;i<a.size();i++)
{
cout<<a[i]<<endl;
}
程序输出:
iterator erase(iterator first,iterator last); //删除向量中[first,last)中元素,注意last是指向要删除的最后一个元素的下一个元素;
如: string str[7] = {"have fun","have fun","good luck","good luck","have fun","have fun","have fun"};
vector<string> a(str,str+7);
a.erase(a.begin()+2,a.begin()+4);
for(int i=0;i<a.size();i++)
{
cout<<a[i]<<endl;
}
程序输出:
void pop_back(); //删除向量中最后一个元素;
如: string str[7] = {"have fun","have fun","good luck","good luck","have fun","have fun","have fun"};
vector<string> a(str,str+7);
a.pop_back();
for(int i=0;i<a.size();i++)
{
cout<<a[i]<<endl;
}
程序输出:
void clear(); //清空向量中所有元素,功能等同于erase(vector.begin(),vector.end());
4)遍历函数
reference at(int pos); //返回pos位置元素的引用
reference front(); //返回首元素的引用
reference back(); //返回尾元素的引用
iterator begin(); //返回向量头指针,指向第一个元素
iterator end(); //返回向量尾指针,指向向量最后一个元素的下一个位置
reverse_iterator rbegin(); //反向迭代器,指向最后一个元素
reverse_iterator rend(); //反向迭代器,指向第一个元素之前的位置
5)判断函数
bool empty() const:判断向量是否为空,若为空,则返回true
6)大小函数
void resize(size_type n); //将向量的元素调整到n个,多删少补,值随机
void resize(size_type n,T& x); //将向量的元素调整到n个,多删少补,值为x
void reserve(size_type n); //将分配给向量的存储空间大小设置为n,注意不能超过max_size
int size() const; //返回当前向量中元素的个数
int capacity() const; //返回当前分配给向量的存储空间的大小
int max_size() const; //返回最大可允许的vector元素数量值
如: string str[7] = {"have fun","have fun","good luck","good luck","have fun","have fun","have fun"};
vector<string> a(str,str+7);
a.pop_back();
cout<<a.size()<<endl;
cout<<a.capacity()<<endl;
cout<<a.max_size()<<endl;
程序输出:
7)其他函数
void swap(vector&); //交换两个同类型向量的数据
void assign(int n,const T& x); //设置向量中第n个元素的值为x
void assign(const_iterator first,const_iterator last); //把向量中[first,last)的元素设置成当前向量元素
8)常用算法
排序:sort(a.begin(),a.end()); //对vector a中序列[begin,end)的元素进行从小到大排列
反转:reverse(a.begin(),a.end()); //对vector a中序列[begin,end)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
复制:copy(a.begin(),a.end(),b.begin()+1); //把vector a中序列[begin,end)的元素复制到b中,从b.begin()+1的位置开始复制,覆盖掉原有元素
查找:find(a.begin(),a.end(),10); //在vector a中序列[begin,end)的元素中查找10,若存在返回其在向量中的位置
标签:允许 fun 一个 bubuko 个数 迭代器 reverse ima 向量
原文地址:https://www.cnblogs.com/jason-20160301/p/8834378.html