Причина, по которой это не работает, заключается в том, что вы вносите изменения только в локальные переменные (first
и second
), которые копируют значений из списка. Вы вообще не изменяете фактическое содержимое списка.
Чтобы код работал, просто измените переменные first
и second
на итераторы списка, а затем разыменуйте их, когда вы захотите получить доступ к их значениям, например:
auto size = newList.size();
if (size > 1)
{
--size;
do
{
check = 0, i = 0;
auto it = newList.begin();
while (i < size)
{
auto first = it;
auto second = ++it;
if (comp_id(*first, *second))
{
auto temp = *second;
*second = *first;
*first = temp;
check = 1;
}
++i;
}
}
while (check == 1);
}
В этом отношении i
также можно заменить итератором:
if (newList.size() > 1)
{
auto begin = newList.begin();
auto end = newList.end()-1;
do
{
check = 0;
auto it = begin;
while (it != end)
{
auto first = it;
auto second = ++it;
if (comp_id(*first, *second))
{
auto temp = *second;
*second = *first;
*first = temp;
check = 1;
}
}
}
while (check == 1);
}