当前位置: 首页 > 知识库问答 >
问题:

无法使min_元素在C中工作

公良信然
2023-03-14

我正在写一个小的递归算法。代码如下:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> coins;

int checkchange(int left) {
    vector<int> choices (coins.size());
    if (left == 0)
        return 0;
    else {
        int min;
        for (int i=0;i<coins.size();i++) {
            choices.at(i) = (1 + checkchange(left - coins.at(i)));
        }
        return min_element(choices.front(),choices.back());
    }
}


int main() {
    int N;
    cin >> N;
    for (int i=0;i<N;i++) {
        int c,m,temp,change;
        cin >> c >> m;
        for (int j=0;j<c;j++) {
            cin >> temp;
            coins.push_back(temp);
        }

        for (int j=0;j<m;j++) {
            cin >> temp;
            change = checkchange(temp);
            cout << change;
        }
    }
    return 0;
}

我得到以下错误:


/usr/lib/gcc/x86_64-redhat-linux/4.4中包含的文件中。7/../../../../包括/c/4.4。7/算法:62,
来自燃烧硬币。cpp:3:/usr/lib/gcc/x86_64-redhat-linux/4.4。7/../../../../包括/c/4.4。7位/stl_算法。h:
在函数“\u FIter std::min\u element(\u FIter,\u FIter)[带\u FIter=
int]”中:烧钱。cpp:19:从此处实例
/usr/lib/gcc/x86_64-redhat-linux/4.4。7/../../../../包括/c/4.4。7位/stl_算法。h:5998:
错误:“一元*”的类型参数无效
/usr/lib/gcc/x86_64-redhat-linux/4.4。7/../../../../包括/c/4.4。7位/stl_算法。h:5998:
错误:“一元*”的类型参数无效。

我尝试过用g和gcc进行编译,它们都给出了相同的错误。我做错了什么?

编辑:

新代码:

int checkchange(int left) {
    vector<int> choices (coins.size());
    if (left == 0)
        return 0;
    else {
        for (int i=0;i<coins.size();i++) {
            choices[i] = (1 + checkchange(left - coins.at(i)));
        }
        return *min_element(choices.begin(), choices.end());
    }
}

新错误消息:

/tmp/ccV3VLsK.o:在函数main'中:


共有1个答案

夏炎彬
2023-03-14

std::min_element需要一个范围。返回对实际值的引用。您应该使用startend方法将迭代器返回到向量中的相应位置:

min_element(choices.begin(), choices.end());
//                  ^^^^^            ^^^

如果您觉得这很乏味,可以创建一个围绕标准min\u元素的函数

template <class Container>
auto min_element(Container c) -> decltype(std::min_element(c.begin(), c.end()))
{
    return std::min_element(c.begin(), c.end());
}

并将其用作:

min_element(choices);

 类似资料:
  • 我正在尝试使用Chrome、Selenium和c#在Sitecore 8.1中运行一些自动化测试。我的代码不想在Sitecore页面中找到任何元素,特别是体验编辑器。我遇到“无法定位元素”警告。 例如:我想要的项目。单击()是工具栏功能区按钮,用于显示工具栏菜单。这是元素: 这是它的 X 路径: /html/body/div/div/div[1]/nav[1]/a[3] 我已经延长了等待时间以使其

  • 非常感谢您的帮助。 我想知道firebug复制xpath是否总是适用于webdriver。 我有一个带有列表的页面,我可以获得完整的xpath来查找前两个元素,但无法对3、4执行相同的操作。 对于第三个,它不起作用: 错误: org.openqa.selenium.NoSuchElementException:无法定位元素:{"method":"xpath","selector":"/html/b

  • [[Img1][Img2[Img3]我试图通过链接文本获取元素。但是低于例外。异常在线程"main"org.openqa.selenium.NoSuchElement异常:没有这样的元素:无法定位元素:{"方法":"链接文本","选择器":"CFDSDSR"} 我尝试切换到帧,但它给出了未找到的帧,但该帧存在: XPath: /html/body/table/tbody/tr/td/form/ta

  • 请参考截图。我正试图单击“取消”按钮,如我的截图所示。即使元素的ID存在,我也无法单击按钮。弹出窗口既不是一个新窗口,也不像是一个警告我。我试图搜索是否是窗口句柄的问题。但是当我搜索窗口句柄时,它只给我一个数字: 收到错误消息- 线程“main”org.openqa.selenium.nosuchelementexception:没有这样的元素:找不到元素:{“method”:“id”,“sele

  • 问题内容: 我有这段代码可创建视图并对其应用渐变。 Xcode没有给我任何编译错误,但是代码崩溃了 与消息 数组元素不能桥接到Objective-C 实际上,我原以为它会在那里崩溃,因为我不确定如何在Swift上创建CGColors数组。令人惊讶的是Xcode提到了Objective-C。在我看来,我正在迅速创建CGColorRef … 有什么线索吗?为什么提到Objective-C,我该如何解决

  • 我试图刮掉一个页面,但我有时无法点击链接/按钮。 当网页加载时,那么loadingWhiteBox会先出现,然后在几秒钟后消失(但它会保留在超文本标记语言代码中),只要该框出现在网站上,我就不能点击链接并获得以下内容错误消息: 有什么办法解决这个问题吗?我已经尝试使用以下命令: 但即使元素不处于活动状态,它也存在。