我正在重写一个引用 std::vector 的自由函数。根据给定的标准,它然后返回向量中项目的索引,如果未找到,则返回 -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);
只需使用返回 interator 的惯用方式,如果未找到该项目,则 return .end()
。
您绝对应该返回一个std::vector<>::iterator
,原因如下:
当你处理一个数据结构时,你应该总是给出正确的“加入对象”。如果你使用一个实际的数组 ( int[]
),你可以给出指针。但是对于 std::vector<>,正确的“访问对象”是迭代器,你永远不应该通过指针访问向量中的元素。
您可以返回your_vec.end()
以指示未找到该元素。