C++逻辑错误

lookforbug 2011-10-15 06:10:14
这是一段简单的删除向量内重复元素的代码;
void count(vector<int>&s,int n)
{int i=0;
while((i+n)<s.size())
{s[i+n-1]=s[i+n];
++i;
}
}

int main()
{vector<int>x;
int n=0,c=0;
int j,i=0;
cout<<"请输入你希望显示的值的数量\n";
cin>>i;
cout<<"请输入一些整数\n";
while(cin)
{cin>>n;
x.push_back(n);
}
sort(x.begin(),x.end());
for(c=1;c<x.size();++c)
if(x[c]==x[c-1]){count(x,c);c-1}
for(j=0;j<i;++j)
cout<<x[j]<<"**";
keep_window_open();
return 0;
}
运行的时候,如果重复元素超过2个以上,结果就不对了,2个以上的重复元素只能删除其中一部分。
for(c=1;c<x.size();++c)
if(x[c]==x[c-1]){count(x,c);c-1}
这部分代码到底哪里出了逻辑错误呢,求人解答
...全文
121 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lookforbug 2011-10-15
  • 打赏
  • 举报
回复
感谢4楼,加了pop_back后正常了。
blingpro 2011-10-15
  • 打赏
  • 举报
回复

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


void count(vector<int>&s,int n)
{
int i(0);
while((i+n)<s.size())
{
s[i+n-1]=s[i+n];
++i;
}
s.pop_back(); //因为前移了,需要删除最后一个

}

int main()
{
int n=0,c=0;
int j,i=4;


vector<int>x;
x.push_back(2);
x.push_back(1);
x.push_back(2);
x.push_back(5);
x.push_back(4);
x.push_back(2);
x.push_back(4);
x.push_back(2);
x.push_back(5);
x.push_back(5);

sort(x.begin(),x.end());

for(c=1;c<x.size();c++)
{
if(x[c]==x[c-1])
{
count(x,c);
c--;
}
}

for(j=0;j<c;++j)
cout<<x[j]<<"**";
system("pause");
return 0;
}
healer_kx 2011-10-15
  • 打赏
  • 举报
回复
你给个测试用例。
lookforbug 2011-10-15
  • 打赏
  • 举报
回复
就是调试了以后想不通才来发帖的啊,有人解答么
healer_kx 2011-10-15
  • 打赏
  • 举报
回复
自己调试。

64,652

社区成员

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

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