Conversation
|
|
||
| void revrot(std::string &inout_sStr, const unsigned int in_cuiPieceSize) { | ||
| if (in_cuiPieceSize == 0) { | ||
| inout_sStr.clear(); |
There was a problem hiding this comment.
так как сказано в задании, что если размер <= 0 вернуть пусто. Вот и чищу, что возвращаю
| return; | ||
| } | ||
| if (inout_sStr.length() < in_cuiPieceSize) { | ||
| inout_sStr.clear(); |
There was a problem hiding this comment.
ага. Так как длина куска больше длины строки. В задании сказано - чистить
| return; | ||
| } | ||
| if (in_cuiPieceSize == 1) { | ||
| return; |
There was a problem hiding this comment.
на счет размер == 1 в задании не сказано чтоб возвращать пусто. Но и манипуляции над строкой бессмысленны.
| unsigned int uiCriterion{}; | ||
| for (auto itPieceOfString = sPieceOfString.begin(); | ||
| itPieceOfString != sPieceOfString.end(); ++itPieceOfString) { | ||
| if (!std::isdigit(*itPieceOfString)) { |
There was a problem hiding this comment.
может это в начале сделать перед циклом? а то не понятно мы делаем resize строке, а потом проверяем символы этой строки.
There was a problem hiding this comment.
согласен, можно вынести проверку на то, что в составе строки только цифры в начало
| inout_sStr.clear(); | ||
| return; | ||
| } | ||
| std::string sOneChar{*itPieceOfString}; |
There was a problem hiding this comment.
а обьязательно создавать строку для одного символа?
There was a problem hiding this comment.
функция stoi принимает в качестве аргумента строку, а манипулировать дальше надо с каждым символом строки. Поэтому и было принято такое решение
| } | ||
| size_t szNewLength{(inout_sStr.length() / in_cuiPieceSize) * in_cuiPieceSize}; | ||
|
|
||
| inout_sStr.resize(szNewLength); |
There was a problem hiding this comment.
в задании сказано "проигнорировать последний кусок если размер меньше чем sz". Вот и отбрасываю лишнее
|
|
||
| void vPushFront(structList &in_oList, int in_iData) { | ||
| structNode *oNode = | ||
| new (structNode){}; // make "try" for catching allocation troubles |
There was a problem hiding this comment.
| new (structNode){}; // make "try" for catching allocation troubles | |
| new structNode{}; // make "try" for catching allocation troubles | |
There was a problem hiding this comment.
промахнулся :)
| if (oCurrentNode == (GetLastEl(in_oList))) { | ||
| return bPopBack(in_oList); |
There was a problem hiding this comment.
я думаю это тут не нужно. Вы добавляете оверхед по том что нужно пробежаться по всему листу а потом если это не последний элемент вы ему переставляете указатели. Думаю пробежка по всему листу явно не надо
There was a problem hiding this comment.
да, возможно. Тогда нужно проконтроллировать на nullptr при дальнейшем переприсваивании указателей
| structNode *oTempNode{oNode}; | ||
| oNode = oTempNode->oPrev; | ||
| delete oTempNode; | ||
| } |
There was a problem hiding this comment.
а зачем тут два раза бегать сначало в конец а потом в начало?
There was a problem hiding this comment.
идея была - удалять все с конца и потом явно удалить первый нод. Если начать удалять сначала, то мы теряем указатель на первый элемент и, если что-то пойдет не так и часть нод не удалится, то уже потенциально не сможем повторно удалить. При удалении с конца можно дописать возможность возвращения к удалению.
| } | ||
| structNode *oNode{in_oList.oFirstNode}; | ||
| while (oNode->oNext != nullptr) { | ||
| if (bEqual(oNodeToCheck, oNode)) { |
There was a problem hiding this comment.
а для этого обьязательно делать отдельную функцию?
There was a problem hiding this comment.
ИМХО так нагляднее. К тому же функция эквивалентности перегружена для разных случаев.
No description provided.