Size: a a a

IT KPI C/C++ ХВ (не UB)

2020 May 22

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
1 2 3 4 5 6 7 8

4 2 3 1 8 6 7 5

так, что ли?
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
меняются в каждой четвёрке первый и последний элемент?
источник

J

Jumber in IT KPI C/C++ ХВ (не UB)
Tony Lutsenko
1 2 3 4 5 6 7 8

4 2 3 1 8 6 7 5

так, что ли?
да
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
так вот неочевидно
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
что если количество не кратно 4?
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
если будет

1 2 3 4 5 6 7 8 9 A B
источник

J

Jumber in IT KPI C/C++ ХВ (не UB)
сделать перестановку, а последние 1-3 элемента оставить как есть
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
ну вот тебе и есть
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
поделить количество элементов на четыре
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
нацело
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
если через указатели или итераторы хочется – можно прыгать через четыре, пока не вышел за последний элемент
источник

V

Vsevolod in IT KPI C/C++ ХВ (не UB)
Jumber
да
источник

М

МишаНЯ in IT KPI C/C++ ХВ (не UB)
Jumber
Как в списке можно поменять значение 1 и 4 элемента, 5 и 8 и тд?
size_t sz = list.size(); //или посчитать вручную в цикле для односвязного списка
auto next_it = list.begin();
for (auto i = 0, it = list.begin(); i < sz; i += 3, it = next_it)
{
   if (i + 3 < sz)
   {
       std::advance(next_it, 3);
       std::swap(it, next_it);
   }
}
источник

J

Jumber in IT KPI C/C++ ХВ (не UB)
Есть возможность обмена значений как-то так или надо через указатели?
void funcForSwap(int count) {
 List* curr = first;
 int iterations = count / 4;
 for (int i = 0; i < iterations; i++) {
   swap(curr->value[i], curr->value[i + 3]);
 }
}
источник

М

МишаНЯ in IT KPI C/C++ ХВ (не UB)
Jumber
Есть возможность обмена значений как-то так или надо через указатели?
void funcForSwap(int count) {
 List* curr = first;
 int iterations = count / 4;
 for (int i = 0; i < iterations; i++) {
   swap(curr->value[i], curr->value[i + 3]);
 }
}
у тебя самопальный список?
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
Jumber
Есть возможность обмена значений как-то так или надо через указатели?
void funcForSwap(int count) {
 List* curr = first;
 int iterations = count / 4;
 for (int i = 0; i < iterations; i++) {
   swap(curr->value[i], curr->value[i + 3]);
 }
}
почему i++?
источник

J

Jumber in IT KPI C/C++ ХВ (не UB)
Tony Lutsenko
почему i++?
опечатка
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
не
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
тебе не нужен iterations
источник

TL

Tony Lutsenko in IT KPI C/C++ ХВ (не UB)
если ты прыгаешь через 4
источник