如何在数组中找到特定值并返回其索引?

新手上路,请多包涵

伪代码:

 int arr[ 5 ] = { 4, 1, 3, 2, 6 }, x;

x = find(3).arr ;

然后 x 将返回 2。

原文由 rectangletangle 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

您为函数使用的语法没有意义(为什么返回值会有一个名为 arr 的成员?)。

要查找索引,请使用 std::distance <algorithm>std::find —。

 int x = std::distance(arr, std::find(arr, arr + 5, 3));

或者你可以把它变成一个更通用的函数:

 template <typename Iter>
size_t index_of(Iter first, Iter last, typename const std::iterator_traits<Iter>::value_type& x)
{
    size_t i = 0;
    while (first != last && *first != x)
      ++first, ++i;
    return i;
}

在这里,如果找不到该值,我将返回序列的长度(这与 STL 算法返回最后一个迭代器的方式一致)。根据您的喜好,您可能希望使用其他形式的故障报告。

在你的情况下,你会像这样使用它:

 size_t x = index_of(arr, arr + 5, 3);

原文由 Peter Alexander 发布,翻译遵循 CC BY-SA 2.5 许可协议

有一个 find(…) 函数可以在数组中找到一个元素,该元素返回一个迭代器到该元素。如果未找到元素,则迭代器指向数组的末尾。

如果找到元素,我们可以简单地计算迭代器与数组开头的距离,以获得该元素的索引。

 using namespace std;

int arr[ 5 ] = { 4, 1, 3, 2, 6 }
auto it = arr.find(begin(arr), end(arr), 3)

if(it != end(arr))
    cerr << "Found at index: " << (it-begin(arr)) << endl;
else
    cerr << "Not found\n";

原文由 Arghavan Mohammadhassani 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏