为什么不能更改实例化对象内部的向量?

时间:2019-11-08 00:06:16

标签: c++ oop exception

我有一个对象列表,我试图在每个对象中删除向量的第一个元素。我一直在尝试的方法不断抛出异常。

我尝试使用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());
    }

}

1 个答案:

答案 0 :(得分:1)

如您所说,如果getParamList()返回一个副本,则getParamList().erase返回一个副本,getParamList().begin()也返回。但是begin()是第二个副本(而不是第一个副本)中的迭代器。从其他容器中删除迭代器是Undefined Behavior,这比仅从临时副本中删除元素要糟糕得多。