因此,这是我用于选择排序的代码,由于某种原因,我在其中交换两个元素的部分不起作用,并给出了各种奇怪的输出。
vector<int> vect{45,32,12,1,67,34,2,15,33,40};
for(auto i=vect.begin();i<vect.end()-1;i++){
auto min=i;
for(auto j=i+1;j<vect.end();j++)
{
if(*min>*j)
{
min=j;
}
}
*i=*i+*min;
*min=*i-*min;
*i=*i-*min;
}
for(int x:vect)
{
cout<<x<<" ";
}
但是当我使用另一种交换方式时,输出正确。
int temp=*min;
*min=*i;
*i=temp;
代替:-
*i=*i+*min;
*min=*i-*min;
*i=*i-*min;
请帮助我找出问题所在。
最佳答案
欢迎使用C++!
您的主要问题是,在某些情况下,迭代器i
指向与迭代器min
相同的对象。
你真正会得到的是
*i=*i+*i;
*i=*i-*i;
*i=*i-*i;
因此,您将得到零结果!
为了解决这个问题,迭代器相等时一定不要交换。
vector<int> vect{45,32,12,1,67,34,2,15,33,40};
for(auto i=vect.begin();i<vect.end()-1;i++){
auto min=i;
for(auto j=i+1;j<vect.end();j++)
{
if(*min>*j)
{
min=j;
}
}
if (i==min) continue; // ADD THIS
*i=*i+*min;
*min=*i-*min;
*i=*i-*min;
}
for(int x:vect)
{
cout<<x<<" ";
}
最好的祝福!
关于c++ - 我的迭代器没有按照预期的方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60528507/