我正在重写一个自由函数,它接受一个std :: vector的引用。根据给定的标准,它返回向量中项目的索引,如果未找到,则返回-1。我更喜欢它是否返回指向项目的指针或std :: vector<> :: iterator?
在决定返回什么时应该考虑什么?
答案 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()
来表示找不到该元素。