vector的erase无效

woailaixiangnan 2018-09-08 05:04:15
洛谷的U35359
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int main()
{
vector<int>v(100002);
int n,m,l;
cin>>n>>m;
for(int i = 1;i<=n;i++)
{
cin>>l;
v.push_back(l);
}
for(int i = 1;i<=m;i++)
{
int x=0,y=0;
char c;
cin>>c;
if(c == 'C')
{
cin>>x>>y;
v[x] -= y;
}
else if(c == 'D')
{
cin>>x;
v.erase(v.begin()+x);
}
else if(c == 'I')
{
cin>>x>>y;
v.erase(v.begin()+x);
v.insert(v.begin()+x,y);
}
else if(c == 'Q')
{
int sum;
sum = 0;
for(vector<int>::iterator it = v.begin() ; it !=v.end() ; it++)
{
sum+=*it;
}
cout<<sum<<endl;
}
}
return 0;
}
...全文
400 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
玉生香 2018-09-11
  • 打赏
  • 举报
回复


#include <vector>
using namespace std;
int main()
{

int n, l,m=1;
cin >> n ;
vector<int>v(n,0);/*初始化大小*/
for (int i = 0;i < n;i++) /*每个单位赋值*/
{
cin >> l;
v[i]=l;
}
while(m) /*循环*/
{
int x = 0, y = 0;
char c;
cin >> c;

switch (c)
{
case 'C':
cin >> x >> y;
if(x<(int)v.size() && 0 <= x) v[x] -= y;
break;
case 'D':
cin >> x;
if (x<(int)v.size() && 0 <= x) v.erase(v.begin() + x);
break;
case 'I':
cin >> x >> y;
if (x<(int)v.size() && 0 <= x) v.erase(v.begin() + x);
if (x<(int)v.size() && 0 <= x) v.insert(v.begin() + x, y);
else v.push_back(y);
break;
case 'Q':
int sum;
sum = 0;
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
sum += *it;
}
cout << sum << endl;
break;

case 'q': /*退出循环*/
m = 0;
cout << "/*退出循环*/" << endl;
break;

default:
break;

}
}
return 0;
}





引用 3 楼 starytx 的回复:
插入、删除操作多的情况选用list


版主正解

vector<int>v(100002); 这样删除一个,插入一个节点,内存移动,消耗大
starytx 2018-09-11
  • 打赏
  • 举报
回复
插入、删除操作多的情况选用list
啊大1号 2018-09-10
  • 打赏
  • 举报
回复
楼主代码里的erase是有效的。注意push.back是从最后插入元素。
举例:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
vector<int> v(10);
v.push_back(6);
v.push_back(7);
for (auto i : v)
cout << i << " ";
cout << endl;
cout << "------华丽丽的分割线-----" << endl;

v.erase(v.begin() + 1);

for (auto i : v)
cout << i << " ";
cout << endl;

return 0;
}

64,661

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧