0

假设我有一个包含值的对象。我希望从对象列表中获取具有特定值的对象的索引。我使用下面的代码来做到这一点,

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;
}

如何在不使用迭代器的情况下避免“不在所有代码路径上返回值”警告?

4

2 回答 2

3

在任何情况下,您都必须从函数中返回 T。如果列表中可能不存在该值,您可以选择:

  1. 返回默认值(例如指针为 nullptr,整数可能为 -1)
  2. 利用boost::optional<T>
  3. 返回结束迭代器:

    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);

最后

如果您需要按索引访问,请不要使用列表。在这种情况下使用向量

于 2012-06-22T05:27:00.430 回答
2

这个问题的答案与“找不到元素时你想发生什么?”的答案相同。

于 2012-06-22T05:28:36.510 回答