Loading...
genadi1980 avatar genadi1980 1 Точки

Templates C++ Code Organisation: Task 2. Censorship

Колеги, поствам си кода, който дава 100 / 100, но бих искал да попитам дали е възможно да бъде написан по-прегледно, защото ми се струва, че достъпа до Iterator, Set и Vector може да бъде по-добре. Вие как сте го направили?

#include "pch.h"
#include "Article13Filter.h"

Article13Filter::Article13Filter(std::set<std::string> copyrighted) : copyrighted(copyrighted) {}

bool Article13Filter::blockIfCopyrighted(std::string s) {
    if (isCopyrighted(s)) {
        Article13Filter::blocked.push_back(s);
        return true;
    }
    else
        return false;
     
}

bool Article13Filter::isCopyrighted(std::string s) {
    std::set<std::string>::iterator it = Article13Filter::copyrighted.begin();
    bool isIn;
    while (it != Article13Filter::copyrighted.end())
    {
        if (*it == s)
        {
            isIn = true;
            break;
        }
        else
            isIn = false;

        ++it;
    }

    return isIn;
}

std::vector<std::string> Article13Filter::getBlocked() {
    return Article13Filter::blocked;
    
}

Тагове:
0
C++ Advanced
pavlinapppp avatar pavlinapppp 17 Точки

защо не пробваш с нещо такова 

bool Article13Filter::isCopyrighted(std::string s) {

       return copyrighted.find(s)==copyrighted.end();
}
 

0
ditchev avatar ditchev 36 Точки

Понеже търсим в std::set, а сет-а съдържа само уникални елементи, е достатъчно:

bool Article13Filter::blockIfCopyrighted(std::string s){
    if(copyrighted.count(s)){
        blocked.push_back(s);
        return true;
    }
    return false;
}

Функцията bool isCopyrighted(std::string s) не я ползвам изобщо и съм я оставил dummy, но нищо не пречи да се навърже и тя, ако така ще се счете за грешка или недокомплектовано.

3
pavlinapppp avatar pavlinapppp 17 Точки

Мдаа, оригинално, не се бях сетила за това!

И да не върви заради скелета, все едно - хубаво решение е! Поздравления, колега ditchev!!!

0
kolioi avatar kolioi 641 Точки

В тази задача спокойно може да използваш count() или binary_search() вместо find(). Времето за изпълнение е едно и също. Въпреки това, кода по-лесно се чете и се разбира какво правиш ако използваш find(). +1 от мен.

1
ditchev avatar ditchev 36 Точки

Благодаря, колежке :))

Но, както каза kolioi, признавам, ...find() != ...end() е по-интуитивен от хуманоидна гледна точка:))

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