我一直在努力编译并玩弄了&符号,但仍无法弄清楚错误是什么。有任何想法吗?
以下是我收到的唯一编译错误。
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());
非常感谢你!
答案 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
)。