Konwersja w kontenerze

Konwersja w kontenerze
K3
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:47
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....

Kopiuj
#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;
}

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:4 dni
  • Lokalizacja:Szczecin
0

Czemu operator != iteratora zwraca T?

Kopiuj
    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.


edytowany 4x, ostatnio: kq
K3
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:47
0

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

kq
Oops, miało być !=, sorry!
K3
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:47
0

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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:4 dni
  • Lokalizacja:Szczecin
0

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


K3
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:47
0

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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:4 dni
  • Lokalizacja:Szczecin
1
Kopiuj
    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


gośćabc
minus za brak klamerek nup :/
K3
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:47
0

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

kq
Zapewne min2 miałeś przed deklaracją iterator.
K3
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:47
0

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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:4 dni
  • Lokalizacja:Szczecin
0

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


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.