2017-05-30 3 views
0

Wie kann ich transform verwenden, um eine Liste von Zahlen durch 2 zu teilen? Ich dachte, dieser Code würde es tun, aber es teilt nur die Nummer 1 mit 2 für die ganze Liste, also muss ich das komplett misshandeln. Kann mir bitte jemand helfen? :)C++ teile Zahlen mit transform (bind)

list<T> v(5, 1); 
list<T> d; 
d.resize(v.size()); 

transform(v.begin(), v.end(), d.begin(), bind(divides<T>(), placeholders::_1, 2)); 
cout << fixed << setprecision(2); 
for (list<T>::iterator i = d.begin(); i != d.end(); i++){ 
    std::cout << *i << endl; 
} 
system("pause"); 
+0

Nun initialisieren Sie die Liste 'v' mit fünf Elementen, die alle die ganze Zahl' 1'. Was hast du sonst noch erwartet? –

+0

Okay, mein Fehler, ich denke, ich dachte, dass Platzhalter :: _ 1 eine Art Konstante war (ich habe irgendwo gelesen, dass _1 nicht in x enthalten war, aber ich muss das übersehen haben). Also, was kann ich tun, um das zu ändern, ich denke, ich brauche etwas anderes als Platzhalter dann ?! – StudentLerning

+0

'Platzhalter :: _ 1 'ist ein Platzhalter für das erste Argument, Sie verwenden es richtig. Ich spreche über die Konstruktion der Variablen "v" als eine Liste von fünf "1". Wenn Sie die Liste "v" ausdrucken, sehen Sie, dass alles "1" ist. Das Ergebnis wird natürlich sein, dass alle Divisionen "1/2" sein werden. Das Problem ist nicht, wie Sie 'transform' oder' bind' oder ähnliches verwenden, es sind die Quelldaten, die das Problem darstellen. –

Antwort

1
  1. How to create a Minimal, Complete, and Verifiable example
  2. Es gibt keinen Grund zu verwenden Liste über Vektor in Ihrem Beispiel.
  3. Es sei denn, Sie sind verpflichtet, bis C 98 ++ können Sie tun transform(...,..., [](T& val) { val /= 2; });
  4. std::cin.ignore() ähnlich ist zu system("PAUSE"); aber plattformunabhängig