【发布时间】:2012-05-09 19:30:37
【问题描述】:
如果找到一个对象,我有一个返回迭代器的函数。
现在我有一个问题。如何解决通知调用此函数的对象找不到对象的问题?
vector<obj>::iterator Find(int id, int test)
{
vector<obj>::iterator it;
aClass class;
for(it = class.vecCont.begin(); it != class.vecCont.end(); ++it)
{
if(found object) //currently in psuedo code
return it;
}
return ???? // <<< if not found what to insert here?
}
我需要更改我的数据结构吗?
提前致谢! :)
【问题讨论】:
-
如果您没有特别的理由使用自己的,请考虑
std::find。不过,它的实现方式是返回end()。 -
这似乎是一个设计缺陷。返回副本、指针、指示找到状态的布尔值并通过引用修改输入实例,但不要将迭代器返回到隐藏容器!
-
发现复杂度为 O(n)。我实际上正在使用后端二进制搜索来进行搜索。这很重要,因为我正在实现一个非常庞大的分布式系统。
-
@dupdupdup 但是该迭代器仅在容器未更改时才有效。这似乎是个坏主意。
-
感谢艾亨德森!实际上那个临时解决了问题。但是,是的,圣哈辛托,你说的是真的。所以我希望你能给我一个例子来说明你之前的意思?