为什么在插入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;
}
答案 0 :(得分:4)
getlist
按值返回一个列表,因此list1.insert
将迭代器用于其起点和终点的不同列表。
您应该更改getlist
以返回对其列表的引用而不是其副本
list<string>& getlist()
答案 1 :(得分:0)
当您从函数返回列表时,使用声明list<type> getlist()
,它将不会返回您实际返回的列表(return lista
)。相反,它会使该列表(lista)的临时副本返回该副本。因此,当您在insert
行中调用两次getlist时,它将返回两个不同列表的开始和结束迭代器,这会产生歧义。
因为@simonc建议您需要更改声明,以便不复制副本并将实际列表返回到调用位置。
答案 2 :(得分:0)
getList返回list的副本,它在迭代器中有自己的内存地址。