目录
简介
Vector是c++提供的容器之一,可以很好的扩展。除此之外,提供了一些函数。
本篇文章将常用的函数进行了使用,利用switch组成了一个菜单,具有尾部扩张 、插入、删除、排序、显示 、修改等功能。
适合初学者。
代码
/*********************
vector
Author:YuBo
Date:2018/1/23
**********************/
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> v; //向量
void menu()
{
cout<<"*********vector的使用************"<<endl;
cout<<"*****1.尾部扩张 2.插入**********"<<endl;
cout<<"*****3.删除 4.排序**********"<<endl;
cout<<"*****5.显示 6.修改**********"<<endl;
cout<<"*****7.退出 "<<endl;
}
void Add()
{
int temp;int N;
cout<<"请输入你要输入的整数个数:"<<endl;
cin>>N;
cout<<"请输入"<<N<<"个整数(空格分割,换行结束):"<<endl;
for(int i=0;i<N;i++)
{
cin>>temp;
v.push_back(temp);
}
}
void Insert()
{
int place,num;
cout<<"请输入从第几个元素前插入(首元素位置为0):"<<endl;
cin>>place;
cout<<"请输入要插入的一个整数:"<<endl;
cin>>num;
v.insert(v.begin()+place,num);
}
void Delete()
{
int i;int place;int from,to;
cout<<"*******1.删除1个 2.删除部分 3.全部清除********"<<endl;
cout<<"请输入菜单号:"<<endl;
cin>>i;
switch(i)
{
case 1:{
cout<<"请输入要删除第几个元素(首元素为0):"<<endl;
cin>>place;
if(place<0||v.size()<place+1)cout<<"输入位置出界。"<<endl;
else v.erase(v.begin()+place);
}break;
case 2:{
cout<<"请输入从区间起始和结束位置(结束位置元素不删除):"<<endl;
cin>>from>>to;
if(from<0||v.size()<to+1)cout<<"输入区间出界。"<<endl;
else v.erase(v.begin()+from,v.begin()+to);//删除区间内,包含区间起始点,不包含尾点
}break;
case 3:{
v.clear();
}break;
}
}
void Sort()
{
int i;
cout<<"*****1.升序 2.降序******"<<endl;
cin>>i;
switch(i)
{
case 1:sort(v.begin(),v.end());break;
case 2:reverse(v.begin(),v.end());break;
}
}
void Display()
{
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void Change()
{
int place;
cout<<"请输入要修改的元素的位置(首元素为1):"<<endl;
cin>>place;
cout<<"请输入一个整数:"<<endl;
cin>>v[place-1];
}
int main()
{
int i;
while(1)
{
menu();
cout<<"请输入菜单号:"<<endl;
cin>>i;
if(i==7)break;
switch(i)
{
case 1:Add();break;
case 2:Insert();break;
case 3:Delete();break;
case 4:Sort();break;
case 5:Display();break;
case 6:Change();break;
default:cout<<"输入错误!"<<endl;break;
}
}
}
运行截图
-----------------------------------------------------2020-08-29更新----------------------------------------
常用函数
函数成员 | 函数功能 |
---|---|
begin() | 返回指向容器中第一个元素的迭代器。 |
end() | 返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。 |
rbegin() | 返回指向最后一个元素的迭代器。 |
rend() | 返回指向第一个元素所在位置前一个位置的迭代器。 |
size() | 返回实际元素个数。 |
capacity() | 返回当前容量。 |
empty() | 判断容器中是否有元素,若无元素,则返回 true;反之,返回 false。 |
reserve() | 增加容器的容量。 |
shrink _to_fit() | 将内存减少到等于当前元素实际所使用的大小。 |
operator[ ] | 重载了 [ ] 运算符,可以向访问数组中元素那样,通过下标即可访问甚至修改 vector 容器中的元素。 |
at() | 使用经过边界检查的索引访问元素。 |
front() | 返回第一个元素的引用。 |
back() | 返回最后一个元素的引用。 |
data() | 返回指向容器中第一个元素的指针。 |
assign() | 用新元素替换原有内容。 |
push_back() | 在序列的尾部添加一个元素。 |
pop_back() | 移出序列尾部的元素。 |
insert() | 在指定的位置插入一个或多个元素。 |
erase() | 移出一个元素或一段元素。 |
clear() | 移出所有的元素,容器大小变为 0。 |
swap() | 交换两个容器的所有元素。 |
emplace() | 在指定的位置直接生成一个元素。 |
emplace_back() | 在序列尾部生成一个元素。 |
emplace_back()函数是 C++11 新增加的,其功能和 push_back() 相同,都是在 vector 容器的尾部添加一个元素。emplace_back() 和 push_back() 的区别,就在于底层实现的机制不同。push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。因此,在实际使用中,推荐大家优先使用 emplace()。
emplace() 是 C++11 标准新增加的成员函数,用于在 vector 容器指定位置之前插入一个新的元素。
emplace() 在插入元素时,是在容器的指定位置直接构造元素,而不是先单独生成,再将其复制(或移动)到容器中。因此,在实际使用中,推荐大家优先使用 emplace()。
由于是直接构造元素,emplace()一次只能插入一个元素。而insert除了上述代码显示的还有其他的参数形式。
语法格式 | 用法说明 |
---|---|
iterator insert(pos,elem) | 在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。 |
iterator insert(pos,n,elem) | 在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。 |
iterator insert(pos,first,last) | 在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。 |
iterator insert(pos,initlist) | 在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。 |
如果是后面三种情况可以使用insert,或者自己循环使用emplace插入。
删除除了上述代码提到的,还有下面两个
函数 | 功能 |
---|---|
pop_back() | 删除 vector 容器中最后一个元素,该容器的大小(size)会减 1,但容量(capacity)不会发生改变。 |
remove() | 删除容器中所有和指定元素值相等的元素,并返回指向最后一个元素下一个位置的迭代器。 |
参考
更多STL例子: C++ STL的使用
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。