0

このコードは c++ で正しいですか?

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

#include <list>リスト (の) を値で返すのは問題がありますか?

4

3 に答える 3

1

動作しますが、大量のメモリがコピーされる可能性があるため、効率的ではありません。次の C++ 標準では、この問題を解決できます。次のコードをお勧めします。

void fillList(list & lst) {
   lst.push_front(...);
}
....
list newList;
fillList(newList);
于 2011-01-12T10:41:50.913 に答える
1

コメントされているように、値による戻りは通常最適化されます (最適化をオンにして実行している場合)。したがって、速度が問題である場合 (プロファイラーによって証明されるまでは問題ありません)、心配する必要はありません。一方、コピー時に list に奇妙な副作用がある場合は、コンパイラと設定によってコピー コンストラクターの呼び出し回数が異なることに注意してください。

于 2011-01-12T10:50:40.777 に答える
-1

単純な型 (int、float、char) ではないローカル オブジェクトを返すことはできませんが、新しいオブジェクトへのポインターを返すことはできます。

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

メモリリークを避けるために、後者のポインターを管理する必要があることに注意してください。

于 2011-01-12T17:28:07.463 に答える