返回指针或迭代器

时间:2012-09-14 08:20:22

标签: c++ iterator stdvector

我正在重写一个自由函数,它接受一个std :: vector的引用。根据给定的标准,它返回向量中项目的索引,如果未找到,则返回-1。我更喜欢它是否返回指向项目的指针或std :: vector<> :: iterator?

在决定返回什么时应该考虑什么?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:3)

只需使用返回迭代器的惯用方法,如果找不到项目,则返回.end()

答案 2 :(得分:1)

你一定要回复std::vector<>::iterator,原因如下:

处理数据结构时,应始终提供正确的“登录对象”。如果使用实际数组(int[]),则可以指出。但是对于std :: vector&lt;&gt;,正确的“访问对象”是迭代器,你永远不应该通过指针访问向量中的元素。

您可以返回your_vec.end()来表示找不到该元素。