std::vector への参照を取る free 関数を書き直しています。指定された基準に基づいて、ベクター内の項目のインデックスを返します。見つからない場合は -1 を返します。アイテムまたは std::vector<>::iterator へのポインターを返した方がいいですか?
何を返品するかを決定する際に考慮すべきことは何ですか?
イテレータを返し、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);
イテレータを返す慣用的な方法を使用し、アイテムが見つからなかった場合は、を返し.end()
ます。
あなたは間違いなくを返す必要がstd::vector<>::iterator
あります、そしてここに理由があります:
データ構造を扱うときは、常に正しい「アクセッションオブジェクト」を提供する必要があります。実際の配列(int[]
)を使用する場合は、ポインターを与えることができます。ただし、std :: vector <>の場合、正しい「アクセッションオブジェクト」はイテレータであり、ポインタを使用してベクター内の要素にアクセスしないでください。
your_vec.end()
要素が見つからなかったことを示す信号に戻ることができます。