Добро пожаловать в 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<<" ";
}
С наилучшими пожеланиями!