【问题标题】:C++'s min_element() not working for array [closed]C++ 的 min_element() 不适用于数组 [关闭]
【发布时间】:2014-07-15 07:37:44
【问题描述】:

我试图在 c++ 中找到数组子集的最小元素,如下所示:

#include <iostream>
#include <algorithm>

using std::cin;
using std::cout;
using std::min_element;

void load_values(int n);
unsigned *w;

int main() {
   int n, a, b;
   cin >> n >> a >> b;
   w = new unsigned[n];
   load_values(n); // sets values to w[i]
   int min = min_element(w+a, w+b);
   }

void load_values(int n) {
 while(n--)
    w[n] = 1;
}

我收到错误 invalid conversion from 'unsigned int*' to 'unsigned int' [-fpermissive]。我在这里错过了什么?

【问题讨论】:

  • 您有内存泄漏。 (这是暗示可能不使用 C 数组,因为它是 C++)。
  • 此外,没有load_values() 内部,其余代码编译。显示所述函数的主体。

标签: c++ arrays min


【解决方案1】:

注意,std::min_element() 将迭代器返回到最小值,而不是值本身。我怀疑您是否仅根据上面的代码得到此错误:假设正确的包含指令并使用指令,代码编译正常,尽管它会打印最小元素的地址而不是其值。您的实际代码很可能看起来更像

unsigned min = std::min_element(w + a, w + b);

注意,您还应该检查从std::cin读取的结果:

if (std::cin >> n >> a >> b) {
   // process the values
}

...当然,您似乎正在泄漏为w 分配的内存。

【讨论】:

  • 这个问题真的需要downvote + vtc,而不是答案。
  • 我的代码实际上看起来确实如此。谢谢!
  • @DeadMG:我很高兴指出,否决票与答案的质量无关,而与答案的存在根本无关。
  • 让你仔细研究你的答案,试图找出它有什么问题,这很糟糕。 FTR,这是一个相当不错的通灵调试。但它在这个提问者上被浪费了,你只是通过提供它来鼓励更多的不良行为,所以我不得不表达它实际上并没有帮助。
猜你喜欢
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 2010-09-06
  • 2017-12-19
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多