Frage

ist dieser Code korrekt in C ++?

list<int> makelist(int litem)
{
    list<int> newList;
    newList.push_front(litem);
    return newList;
}

sollte es Probleme eine Liste zurückzukehren (von #include <list>) von Wert?

War es hilfreich?

Lösung

Wie kommentiert durch Werte zurückgegeben wird in der Regel weg optimiert werden (beim Laufen mit der Optimierung eingeschaltet). Also, wenn Geschwindigkeit ist die Sorge, (was sie nicht, bis sie von einem Profiler bewiesen wurde) Sie sollten sich keine Sorgen. Wenn die Liste auf der anderen Seite einige seltsame Nebenwirkungen hat, wenn das Kopieren sollten Sie sich bewusst von der Anzahl der Copykonstruktor Anrufe werden je nach Compiler und Einstellungen variieren.

Andere Tipps

Es wird funktionieren, aber es ist nicht effizient, weil eine Menge Speicher könnte kopiert werden. Im nächsten C ++ Standard, kann dieses Problem gelöst werden. Ich würde den folgenden Code vorschlagen:

void fillList(list & lst) {
   lst.push_front(...);
}
....
list newList;
fillList(newList);

Sie können nicht ein lokales Objekt zurück, das ist nicht einfach Typ (int, float, char), aber Sie können einen Zeiger auf ein neues Objekt zurückgeben:

list<int>* makelist(int litem)
{
    list<int>* newList = new list<int>();
    newList->push_front(litem);
    return newList;
}

Achten Sie darauf, dass Sie den Zeiger letztere zu vermeiden Speicherlecks verwalten muss.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top