题目链接:https://vjudge.net/problem/Aizu-ALDS1_3_C
这一题一开始的时候想的是用vector,超时
#include <iostream>
#include <stack>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
typedef long long ll;
using namespace std;
int main ()
{
ll x,n,i;
scanf("%lld",&n);
char command[20];
vector<ll> s;
for(i=1;i<=n;i++)
{
scanf("%s",command);
if(strcmp(command,"insert")==0)
{
scanf("%lld",&x);
s.insert(s.begin(),x);
}
else if(strcmp(command,"delete")==0)
{
scanf("%lld",&x);
vector<ll>::iterator it = s.begin();
for(;it!=s.end();it++)
{
if(*it==x)
{
s.erase(it);
break;
}
}
}
else if(strcmp(command,"deleteFirst")==0)
{
s.erase(s.begin());
}
else if(strcmp(command,"deleteLast")==0)
{
s.pop_back();
}
}
ll size=s.size();
for(i=0;i<size;i++)
{
if(i!=size-1)
cout<< s[i] << " ";
else
cout << s[i] << endl;
}
return 0;
}
换成list
#include <iostream>
#include <stack>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <list>
#include <algorithm>
typedef long long ll;
using namespace std;
int main ()
{
ll x,n,i;
scanf("%lld",&n);
char command[20];
list<ll> s;
for(i=1;i<=n;i++)
{
scanf("%s",command);
if(strcmp(command,"insert")==0)
{
scanf("%lld",&x);
s.push_front(x);
}
else if(strcmp(command,"delete")==0)
{
scanf("%lld",&x);
list<ll>::iterator it = s.begin();
for(;it!=s.end();it++)
{
if(*it==x)
{
s.erase(it);
break;
}
}
}
else if(strcmp(command,"deleteFirst")==0)
{
s.pop_front();
}
else if(strcmp(command,"deleteLast")==0)
{
s.pop_back();
}
}
i=0;
list<ll>::iterator it=s.begin();
while(it!=s.end())
{
if(i++)
printf(" ");
printf("%lld",*it);
it++;
}
printf("\n");
return 0;
}
本文探讨了在处理特定编程挑战时,从使用vector到list的数据结构转换如何显著提高效率。通过对比两种数据结构在插入、删除操作上的性能差异,展示了在面对频繁的元素增删需求时,list相较于vector的优势。
2万+

被折叠的 条评论
为什么被折叠?



