C++ <int*, std::vector<int, std::allocator<int> > >' 要求??在一个简单的 20 行程序上

C++ <int*, std::vector<int, std::allocator<int> > >’ requested?? on a simple 20 line program

我一直在尝试编译并尝试使用 & 符号,但仍然无法弄清楚错误是什么。有任何想法吗?

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

 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());

非常感谢!

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

要解决这个问题,只需删除 it2

您在 return 语句之后还有代码,该代码不可访问(并且使用未声明的标识符 it3)。

The documentation 很清楚,不是吗? std::nth_element returns void,但您正试图从中初始化一个迭代器。我怀疑你不是真的想用std::nth_element,这是一种部分排序算法。

如果您尝试实际打印 nth 元素,则此部分排序算法与该目标无关而您应该简单地访问 nth 元素!像这样:

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

如果您 确实 打算使用此算法,那么不清楚您试图用此 it2 完成什么(稍后打字错误为 it3).你想打印什么元素?无论如何,您是否意识到自己 return 首先是从函数中提取的?

你可以这样写:

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

然后以其他方式实现您的 "printing" 目标,无论目标是什么。