functor-frage



  • struct functor
    {
    	template <class T>
    	bool operator()(T first, T last)
    	{
    		return first < last && first > 0;
    	}
    };
    
    int main()
    {
    	vector<int> arr;
    	arr.push_back(-1);
    	arr.push_back(4);
    	arr.push_back(1);
    	arr.push_back(-1);
    	vector<int>::iterator iter; 
    	iter = min_element(arr.begin(), arr.end(), functor());
    	int zei = distance(arr.begin(), iter);
    	cout << zei << endl;
    	return 0;
    }
    

    Gesucht ist die Position des kleinsten positiven Elementes des Vektors. Das macht der functor auch, solange ... an erster Stelle des Vektors kein negativer Wert ist. So wie hier. Hier wird 0 fälschlicherweise als kleinste Position ausgegeben. Wäre arr[0] irgendwas > 0, würde das Ding korrekt laufen. Wie muss der functor abgeändert werden? Danke.



  • Du musst sicherstellen, dass wenn eine Zahl negativ ist, die andere automatisch kleiner ist.

    #include <functional>
    
    class functor : public std::binary_function<int, int, bool>
     {
     public:
         bool operator()(int first, int last)
         {
          if (first < 0) return false;
          return (last < 0) or (first < last);
         }
     };
    

Anmelden zum Antworten