Професионална програма
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