0

stlリストの挿入中にこのコードがハングするのはなぜですか? copy関数も試しましたが、機能しません。

#include <iostream>
#include <string>
#include <iterator>
#include <list>
#include<vector>
#include<algorithm>
using namespace std; 

class a{
    list<string> lista;

    public:
    a()
    {

        lista.push_back("ele");
        lista.push_back("phant");
        cout<<"End of Cons"<<endl;
    }

    list<string> getlist()
    {
        cout<<"Getting"<<endl;
        return lista;
    }
};

int main()
{

    a A1;

    list<string> list1;
    list1.insert(list1.end(),A1.getlist().begin(),A1.getlist().end());
    //copy(A1.getlist().begin(),A1.getlist().end(),back_inserter(list1));
    cout<<"End of Prog"<<endl;
    return 0;

}
4

3 に答える 3

4

getlist値でリストを返すlist1.insertため、開始点と終了点の異なるリストにイテレータを使用しています。

getlistリストのコピーではなく、そのリストへの参照を返すように変更する必要があります

list<string>& getlist()
于 2013-08-05T08:40:04.803 に答える
0

宣言を使用して関数からリストをlist<type> getlist()返す場合、実際に返すリストは返されません( return lista)。代わりに、そのリスト (lista) の一時的なコピーを作成し、そのコピーを返します。そのため、行でgetlist を 2 回呼び出すとinsert、2 つの異なるリストの開始イテレータと終了イテレータが返され、あいまいさが生じます。

したがって、@simonc が示唆したように、コピーが行われず、実際のリストが呼び出し元に返されるように、宣言を変更する必要があります。

于 2013-08-05T08:50:12.057 に答える