#include <iostream>
#include <algorithm>
#include <list>
int main(/*int argc, char *argv[]*/)
{
using lisst = std::list<int>;
lisst mylist;
for(int i = 0; i < 9; ++i)
{
mylist.push_back(i + (i*i));
}
for(int & x : mylist) std::cout << x << ' ';
std::cout << "\n\n";
lisst::iterator b_it = mylist.begin();
lisst::iterator e_it = mylist.end();
--e_it;
while(b_it != e_it) // ??????????
{
std::swap(*b_it, *e_it);
++b_it;
if(b_it == e_it) break; // ??????????
--e_it;
}
for(int & x : mylist) std::cout << x << ' ';
return 0;
}
Вопрос: почему в цикле while проверка на равенство работает некорректно. Добавление условия if исправляет ситуацию ?
Вы двигаете оба итератора одновременно. При четном количестве элементов они могут "разминуться". Ваш if
как раз этот случай и проверяет.
А вообще, раз уж вы подключили algorithm
, то пользуйтесь им:
#include <iostream>
#include <algorithm>
#include <iterator>
#include <list>
int main(/*int argc, char *argv[]*/)
{
using lisst = std::list<int>;
lisst mylist;
for(int i = 0; i < 4; ++i)
{
mylist.push_back(i + (i*i));
}
std::copy(mylist.begin(), mylist.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n\n";
std::reverse(mylist.begin(), mylist.end());
std::copy(mylist.begin(), mylist.end(), std::ostream_iterator<int>(std::cout, " "));
return 0;
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Ребят я начал углубляться в программирование,но увы есть много проблем с обучением1
Есть файл в нем числаВывести все числа удалив из них повторяющиеся цифры
Есть ли в С++ оператор возведения в степень? Можно ли его перегрузить?