Konwersja w kontenerze

0

Cześć. Mam problem z kontenerem. Chce wywołać funkcje znajdującą liczbę minimalna.(Funkcja min2). Umieszczam kod poniżej. Niestety wywala mi błąd odnośnie konwersji Konten<double>::iterator na double....

#ifndef KONTEN_H
#define KONTEN_h

#include <cassert>
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <ctime>

using namespace std;

template<typename T>
class Konten
{
	enum { ssize = 100 };
	T stack[ssize];
	int top;
public:
	Konten() : top(0) {}
	void push(T i) {
		assert(top < ssize);  stack[top++] = i;
	};
	T pop() {
		assert(top > 0);  return stack[--top];
	};
	int rozmiar() { return top; };

	T min2(T start, T end)
	{
		double min = *start;
		while (start != end)
		{
			if (*start < min)
				min = *start;
			start++;
		}
		return min;
	}

	class iterator {
		Konten& s;
		int index;
	public:
		iterator(Konten& is) : s(is), index(0) {};
		iterator(Konten& is, bool) : s(is), index(s.top) {};
		T operator++() { // Prefix
			assert(index < s.top);
			return s.stack[++index];
		};
		T operator++(int) { // Postfix
			assert(index < s.top);
			return s.stack[index++];
		};
		T& operator*() const { return s.stack[index]; };
		iterator& operator=(const iterator& rv) {
			s = rv.s;
			index = rv.index;
			return *this;
		}
		T operator!=(const iterator& rv) const {
			return index != rv.index;
		}


	};
	iterator begin() { return iterator(*this); };
	iterator end() { return iterator(*this, true); };

	friend class iterator;

	
	
};
#endif



double randdouble()
{
	return rand() / (double(RAND_MAX) +1) ;
}

int main()
{
	srand(time(NULL));
	Konten<double> is;

	for (int i = 0; i < 10; i++)
	{
		double liczba = rand() %10 + randdouble();
		is.push(liczba);
	}

	Konten<double>::iterator it=is.begin();

	while (it != is.end()) // nie musimy znać rozmiaru stosu..
		cout << setprecision(2)<<it++<<endl;

	double min = is.min2(is.begin(),is.end());

	return 0;
}

0

Czemu operator != iteratora zwraca T?

    T min2(T start, T end)
    {
        double min = *start;
        while (start != end)
        {
            if (*start < min)
                min = *start;
            start++;
        }
        return min;
    }

Dla T = double, jaki sens ma *start? Pewnie chciałeś przyjąć iteratory.

0

Próbowałem różnych rzeczy. Nie ma pojęcia jak sobie z tym poradzić. Gdzie ty widzisz operator +=?

0

Hmmm, miało być chyba bool, jeśli dobrze myślę. Mój błąd.

0

No to zamień tam typy parametrów z T na iterator i ten błąd powinien zniknąć.

0

Niestety nadal mi nie działa. Mógłbyś ty spróbować jeżeli wiesz w czym dokładnie problem?

1
    T min2(iterator start, iterator end)
    {
        double min = *start;
        while (start != end)
        {
            if (*start < min)
                min = *start;
            start++;
        }
        return min;
    }

https://wandbox.org/permlink/cnF4GgArXADovHbr

0

Super. Dzięki wielkie. Nie wiem czemu mi u nie działało. Zrobiłem identycznie. Jutro poszukam mojego błędu.

0

Tak Ci wysłałem. Ale miałem też po.

0

A, no to nie wiem dlaczego, powodzenia jutro ;​)

1 użytkowników online, w tym zalogowanych: 0, gości: 1