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 に答える