C ++ <int *,std :: vector <int,=“”std :: allocator <int =“”>&gt; &gt;'要求?在一个简单的20行程序</int *,>

时间:2015-03-28 23:25:56

标签: c++ vector iterator

我一直在努力编译并玩弄了&符号,但仍无法弄清楚错误是什么。有任何想法吗?

以下是我收到的唯一编译错误。

 error: conversion from ‘void’ to non-scalar type ‘__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >’ requested

并且导致错误的行是

    iterator it2 = nth_element (v_best.begin(), v_best.begin()+n, v_best.end());

非常感谢你!

2 个答案:

答案 0 :(得分:3)

The documentation非常清楚,不是吗? std::nth_element返回void,但您正在尝试从中初始化迭代器。我怀疑你实际上并不想使用std::nth_element,这是一种部分排序算法。

如果您正在尝试实际打印 n th 元素,那么此部分排序算法与该目标无关,您应该简单地说,好吧,访问 n th 元素!像这样:

std::cout << v_best[n] << '\n';

如果您 意味着使用此算法,那么您不清楚您尝试使用此it2完成了什么(后来的拼写错误&#39; d作为it3)。你想要打印什么元素?你是否首先意识到你return编辑了这个函数?

你可以写:

nth_element(v_best.begin(), v_best.begin()+n, v_best.end());

然后完成你的&#34;打印&#34;目标,无论可能是什么,以某种其他方式。

答案 1 :(得分:0)

nth_element function返回void。但是,您尝试将其转换为iterator

解决这个问题只是摆脱it2

此外,您在return语句后面有代码,该语句无法访问(并使用未声明的标识符it3)。