0

std::vector への参照を取る free 関数を書き直しています。指定された基準に基づいて、ベクター内の項目のインデックスを返します。見つからない場合は -1 を返します。アイテムまたは std::vector<>::iterator へのポインターを返した方がいいですか?

何を返品するかを決定する際に考慮すべきことは何ですか?

4

3 に答える 3

4

イテレータを返し、yourVector.end()要素が見つからない場合。

これは、標準ライブラリが使用するものです。

例:

auto my_function(std::vector<int>& v) -> decltype(v.begin())
{
    // Do the search
    ...
    else return v.end();
}

あなたができるならより良いです

template <typename I>
I my_function(I begin, I end)
{
     // Do the search
     ...
     else return end;
}

template <typename C>
auto my_function(C&& c) -> decltype(std::begin(c))
{
    return my_function(std::begin(c), std::end(c));
}

すべてのコンテナ(配列を含む)で機能するため:

double my_array[] = { 1, 2, 42, -7 };
auto p = my_function(my_array);
于 2012-09-14T08:21:38.500 に答える
3

イテレータを返す慣用的な方法を使用し、アイテムが見つからなかった場合は、を返し.end()ます。

于 2012-09-14T08:23:18.500 に答える
1

あなたは間違いなくを返す必要がstd::vector<>::iteratorあります、そしてここに理由があります:

データ構造を扱うときは、常に正しい「アクセッションオブジェクト」を提供する必要があります。実際の配列(int[])を使用する場合は、ポインターを与えることができます。ただし、std :: vector <>の場合、正しい「アクセッションオブジェクト」はイテレータであり、ポインタを使用してベクター内の要素にアクセスしないでください。

your_vec.end()要素が見つからなかったことを示す信号に戻ることができます。

于 2012-09-14T08:23:43.903 に答える