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
有什么问题?
jua*_*nza 10
这是因为std::list迭代器是双向迭代器,因此它们不支持您尝试执行的加法操作.实际上,这是因为它不能实现为有效的操作,因为列表不提供随机访问,因此您必须从初始迭代器到目标迭代器单步递增.设计决策是不提供效率低下的操作.
您可以使用std::advance或std::next避免编写自己的增量循环,但在引擎盖下它将逐步增加.