我有一个对象列表,我试图在每个对象中删除向量的第一个元素。我一直在尝试的方法不断抛出异常。
我尝试使用get函数,但这不起作用吗?那是因为get函数可能返回的是副本而不是实际的东西吗?
void Interpreter::createQueryList()
{
queryList = datalogProgram.getQueries();
for (unsigned int i = 0; i < queryList.size(); ++i)
{
queryList.at(i).getParamList().erase( queryList.at(i).getParamList().begin());
queryList.at(i).getBoolList().erase( queryList.at(i).getBoolList().begin());
}
}
答案 0 :(得分:1)
如您所说,如果getParamList()
返回一个副本,则getParamList().erase
返回一个副本,getParamList().begin()
也返回。但是begin()
是第二个副本(而不是第一个副本)中的迭代器。从其他容器中删除迭代器是Undefined Behavior,这比仅从临时副本中删除元素要糟糕得多。