0

我正在重写一个引用 std::vector 的自由函数。根据给定的标准,它然后返回向量中项目的索引,如果未找到,则返回 -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

只需使用返回 interator 的惯用方式,如果未找到该项目,则 return .end()

于 2012-09-14T08:23:18.500 回答
1

您绝对应该返回一个std::vector<>::iterator,原因如下:

当你处理一个数据结构时,你应该总是给出正确的“加入对象”。如果你使用一个实际的数组 ( int[]),你可以给出指针。但是对于 std::vector<>,正确的“访问对象”是迭代器,你永远不应该通过指针访问向量中的元素。

您可以返回your_vec.end()以指示未找到该元素。

于 2012-09-14T08:23:43.903 回答