Loading...
niagara avatar niagara 22 Точки

C++ Advanced- 06.Exercise on Advanced Class Members and Code Organization -Task 5 - Sequences

Здравейте, питането ми се отнася по-скоро към Георги Георгиев, но ще съм благодарна ако и някой от решилите вече задачата се включи. Може ли да подскажете още за end(). След много мислене не стигнах до никъде. Много рових в интернет, но всъщност май не знам какво да търся. Ето го кодът ми до тук: https://pastebin.com/GuN1vs5r

Тагове:
0
C++ Programming
Danny_Yanev avatar Danny_Yanev 16 Точки

End() трябва да връща итератор "сочещ" към последния елемнт от, в случая, вектор. Целта му е да се пишат подобни цикли

for(auto i = dataStructure.begin(); i != dataStructure.end(); ++i){
    ...
}

Тъй като при итератори в някой дата сетове няма как да знаем (или не ни интересува) кой е последния въртим докато итераторът (i) ни не стане равен на последния, върнат от end(). 

0
Jovanna avatar Jovanna 186 Точки

Здравей,

това, което успях да измисля, но не гарантирам че е вярно,

    Iterator begin() {
        return { 0, this->elements };    
    }
    Iterator end() {
        return { this->elements.size() - 1, this->elements }; 

но програмата ми продължава да не тръгва, още я боря.

Поздрави!

0
16/10/2018 19:48:20
Jovanna avatar Jovanna 186 Точки

Така, току-що успях с тази задача и бързам да споделя:

поддържай контейнера с размер - един елемент повече (слагам 0 и я трия преди всяко пълнене , както и я добавям пак всеки път; инициализирам вектора с 0)

Иначе, тайната е в оператора !=

ето го, малко съм го "разводнила", щото дебъгвах доста ...

    bool operator!=(Iterator& other) {
            bool dontStopToIterateThis = this->index == this->elements.size() - 1;
            other.index = (this->elements.size() - 1);
            bool dontStopToIterateOther = other.index == this->elements.size() - 1;
            bool dontStopToIterate = !(dontStopToIterateThis && dontStopToIterateOther);
            return dontStopToIterate;
        }

Успех!

0
niagara avatar niagara 22 Точки

Къде добавяш тази нула?

0
Jovanna avatar Jovanna 186 Точки

class Sequence {
    std::vector<T> elements{ 0 };
    Generator generator;

 

и после:

void generateNext(int numToGenerate) {
        (this->elements).pop_back();
        for (int i = 0; i < numToGenerate; i++) {
            this->elements.push_back(generator());
        }
        this->elements.push_back(0);
    }

0
niagara avatar niagara 22 Точки

Много благодаря

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