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

问题描述 投票:0回答:1

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

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;

[请帮助我找出问题出在哪里。

stl iterator c++14
1个回答
0
投票

您总是需要一个临时变量来交换两个元素。就像您要交换两个杯子一样,您需要第三个。

© www.soinside.com 2019 - 2024. All rights reserved.