错误:对于列表迭代器,"不匹配运算符+"

mer*_*esi 6 c++ iterator stl list

对于下面的代码,我收到行标题中的错误

while((*(It2 + code)).exists){
Run Code Online (Sandbox Code Playgroud)


void locatetohashtable(std::list<Element> elist,
                       int *m,std::list<Element>& table,
                       std::list<std::string>& keylist )
{        
    std::list<Element>::iterator It2=table.begin();
    int i=0;
    int k=0;
    std::list<Element>::iterator It;
    for(It = elist.begin(); It != elist.end(); ++It)
    {
        int code=hash_func(stringIntValue((*It).name),*m,i);
        while((*(It2 + code)).exists){
            i++;
        }
        table.insert(*(It2+i), (*It));
        keylist.insert(keylist.begin(),(*It).name);
        k++;
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有得到同样的错误 ++It

有什么问题?

Tra*_*kel 11

一个iterator一个std::list是双向的,所以它不支持+(int).唯一受支持的移动操作是++--.


jua*_*nza 10

这是因为std::list迭代器是双向迭代器,因此它们不支持您尝试执行的加法操作.实际上,这是因为它不能实现为有效的操作,因为列表不提供随机访问,因此您必须从初始迭代器到目标迭代器单步递增.设计决策是不提供效率低下的操作.

您可以使用std::advancestd::next避免编写自己的增量循环,但在引擎盖下它将逐步增加.