假设我有一个包含值的对象。我希望从对象列表中获取具有特定值的对象索引。我使用下面的代码来做到这一点,
int MyClass::getIndex(list& somelist, int requiredValue)
{
for( i=0; i != somelist.count(); ++i)
{
if(somelist.at(i)->value() == requiredValue)
return i;
else
continue;
}
return -1;
}
如何在不使用迭代器的情况下避免“不会在所有代码路径上返回值”警告?
答案 0 :(得分:3)
在任何情况下都必须从函数返回T.如果列表中可能不存在该值,则可以选择:
boost::optional<T>
return end iterator:
std::list<int>::iterator find_something(std::list<int> &my_list)
{
for (auto it = my_list.begin(); it != my_list.end(); ++it)
{
if (cond)
{
return it;
}
}
return my_list.end();
}
同时强>
如果您只想找到某个值的迭代器,请使用std::find
:
auto it = std::find(my_list.begin(), my_list.end(), my_value);
<强>最后强>
如果您需要按索引访问,请不要使用列表。在这种情况下使用向量
答案 1 :(得分:2)
这个问题的答案与“未找到元素时你想要发生什么?”的答案相同。