gpt4 book ai didi

c++ - 我的迭代器没有按照预期的方式工作

转载 作者:行者123 更新时间:2023-12-02 10:05:14 25 4
gpt4 key购买 nike

因此,这是我用于选择排序的代码,由于某种原因,我在其中交换两个元素的部分不起作用,并给出了各种奇怪的输出。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com