C++ <int*, std::vector<int, std::分配器<int> > >' request?? 在一个简单的 20 行程序上

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

本文关键字:gt int lt std 简单 一个 程序上 分配器 vector C++ request      更新时间:2023-10-16

我一直在尝试编译,玩过与号符号,但仍然不知道错误是什么。有什么想法吗?

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

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

非常感谢!

文档非常清晰,不是吗?std::nth_element返回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());

然后以其他方式完成你的"打印"目标,不管是什么。

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

要解决此问题,请删除it2

此外,return语句后面还有代码,它是不可访问的(并且使用未声明的标识符it3)。