Description
请你定义一个线性表,可以对表进行“在某个位置之前插入一个元素”、“删除某个位置的元素”、“清除所有元素”、“获取某个位置的元素”等操作。键盘输入一些命令,可以执行上述操作。本题中,线性表元素为整数,线性表的第一个元素位置为1。线性表的最大长度为1000。
Input
各个命令以及相关数据,它们对应的格式如下:
在某个位置之前插入操作:insert,接下来的一行是插入的组数n,下面是n行数据,每行数据有两个值,分别代表位置与插入的元素值
清除线性表:clear
获取某个位置的元素:getelem,接下来一行是需要获取的元素位置
删除某个位置的元素:delete,接下来一行是被删除的元素位置
当输入的命令为exit时,程序结束
Output
当输入的命令为getelem时,请输出获取的元素值,
当输入的命令是delete时,请输出被删除的那个元素值
注意,所有的元素均占一行
Sample input
insert
2
1 1
2 2
delete
1
clear
insert
2
1 3
2 4
getelem
2
exit
Sample output
1
4
#include<vector>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
vector<int>v;
vector<int>::iterator it;
char a[15];
int i,p,x,n,s; //s作为计数
while(scanf("%s",a)!=EOF)
{
s=1; //由于vector从0计数,而我们通常元素的计数从1开始
if(strcmp(a,"insert")==0)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
cin>>p>>x; //p是位置第p个,x是第p个元素的值
v.insert(v.begin()+p-1,x); //由于vector从0计数,所以插入第p个元素的位置需-1
}
}
else if(strcmp(a,"clear")==0)
{
v.clear();
}
else if(strcmp(a,"exit")==0)
break;
else if(strcmp(a,"getelem")==0)
{
cin>>n;
for(it=v.begin();it!=v.end();it++,s++)
if(s==n)
{
cout<<*it<<endl;
break;
}
}
else if(strcmp(a,"delete")==0)
{
cin>>n;
for(it=v.begin();it!=v.end();s++)
if(s==n) //第n个元素
{
cout<<*it<<endl;
it=v.erase(it); //删除元素,返回值指向已删除元素的下一个位置
break;
}
else it++; //指向下一个位置
}
}
}