Loading...

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

Jovanna avatar Jovanna 186 Точки

С++Advanced,лекция2, Task2 - Remove Invalid - защо два пъти се вика функцията, махаща обектите с отрицателно id

Здравейте,

това някаква оптимизация ли е? Защо два пъти се вика функцията махаща обектите с отрицателно id, като първата се активира веднъж на всеки 10 елемента и после пак работи само втората?

while (properties[0] != "end") {
        companies.push_back(new Company(std::stoi(properties[0]), properties[1]));

        sinceLastRemoval++;
        if (sinceLastRemoval >= 10) {
            removeInvalid(companies);
            sinceLastRemoval = 0;
        }

        properties = readStringsLine();
    }

Поздрави!

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

Здравей,

Основната идея на това е да бъде трик, с който ви принуждавам правилно да освобождавате паметта.

Ако триенето е само веднъж накрая, няма как да разбера дали правите delete - какъвто и memory limit да сложа, той трябва да е съобразен с размера на всичките данни, а след вашата операция програмата ще завърши, тоест няма да се увеличи паметта ако не я триете правилно.

Ако пък го правя на всяка стъпка, вашия код е достатъчно само да погледне последния елемент, без да обхожда списъка. Също така с много на брой обхождания ви принуждавам да пишете код, който правилно прави много на брой обхождания - ако беше само веднъж може да "счупите" списъка като разкачите някакви елементи примерно.

И съответно като имаме викане на removeInvalid сравнително често, предвид че тестовите данни са произволни, това означава, че ако общо има X обекта във входа, значи програмата би следвало да стои на памет около X/2, защото половината от данните ще са невалидни и ще бъдат махнати - стига да delete-вате паметта. Съответно така мога да преценя какво ограничение да сложа, което да ми каже дали триете паметта правилно.

Малко е игра на номера, но няма друг автоматизиран начин да ви проверявам дали сте усвоили нещо и дали можете да решавате задачи с него. Иначе в реалния живот се правят подобни неща - памет се овобождава често, но не постоянно, защото това отнема време и е по-изгодно да се изчака да се съберат повечко неща за освобождаване в момент в който програмата е по-малко натоварена (разбира се това е много зависимо от изискванията на програмата).

Поздрави,

Жоро

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