Loading...
sremkin avatar sremkin 0 Точки

C++ advanced Task 3 - RemoveInvalid

Здравейте,

имам въпрос отностно итератора на листа - защо не се инкрементира ?

for(std::list<Company*>::iterator it   =   companies.begin();   it   !=   companies.end();   )
 {
             if (условие)

           {
          it=companies.erase(it);         

          }
           else{
              it++;    
                 }
    }
 break;    

Че бъркам някъде, бъркам, но с часове се боря вече и незнам.

Тагове:
0
C++ Programming
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Здравей,

На мен ми изглежда добре тази част от кода, сигурен ли си, че точно тук не се инкрементира? Този break долу какво break-ва? Предполагам има външен цикъл, а ако правиш два вложени цикъла и във вътрешния триеш елементи, които външния обхожда - това не е особено безопасно и най-вероятно ще инвалидираш външния цикъл, защото той работи със стари итератори. Изобщо за тази задача не ти трябва втори цикъл, един цикъл е достатъчно за да обходиш елементите и да махнеш всеки излишен - не е нужно за всеки елемент да обхождаш всички останали, което би станало ако имаш вложен цикъл. Когато махаш развалени ябълки от кофа с ябълки, просто вземаш една по една ябълките и ако някоя се окаже развалена, я махаш - няма нужда да погледнеш всички останали ябълки преди да махнеш една конкретна.

Направи си извеждане на всяка стъпка и виж какво точно се случва - струва ми се, че проблемът ти е друг, не е в инкементирането на итератора.

Поздрави,

Жоро

0
sremkin avatar sremkin 0 Точки

Да наистина, проблема беше другаде. Сега работи, но не изпълнявам изискванията за memory limit, но нищо.

thanks Жорка

0
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Да, текущото ти решение е вярно, но имаш memory leak (затова и не ти стига паметта) - помисли къде е leak-ът.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.