c++ - 如何修复 'No match for operator[]' 错误 (c++)

标签 c++

所以我得到了这个数组: int arr[] = {60,70,30,15,17,80,16,75,90,85,40,75};

我必须在这个数组中“容纳”尽可能多的元素,同时让它们的总和小于 500(基本上是删除最大的一个,直到总和小于 500)。

这是我试过的:

#include <iostream>
#include <algorithm>
#include <list>

using namespace std;

int largestOfArray(int number[]);

int main()
{
    int sum = 0;
    int i = 0;
    int arr[] = {60,70,30,15,17,80,16,75,90,85,40,75};
    list<int> ar(arr,arr+12);

    for (i = 0; i < 12;i++) 
        sum += arr[i];

    while (sum > 500)
        ar.remove(largestOfArray(arr[12]));

    for (i = 0; i < 12;i++)
        sum += arr[i];

    for (i = 0;i < 12; i++)
        cout << arr[i];

    cout << sum;
    return 0;
}

int largestOfArray(int number[12]){
    int i = 0;
    int largest = number[0];
    for (i = 0;i < 12;i++){
        if (largest < number[i]) largest = number[i];
    }
    return largest;
}

我一直收到这个错误:

no match for 'operator[]' (operand types are 'std::__cxx11::list' and 'int')

我知道它与 ar.remove(largestOfArray(ar[12])); 有关 但我不知道如何修复它。

最佳答案

首先,您同时使用ararr,而arr 是一个数组而ar 是一个列表.这既让读者感到困惑,也让代码作者(事实证明)感到困惑。

在 C++ 中,std::list 没有随机访问。您不能使用 ar[],因为没有为列表定义 operator[]。此外,largestOfArray 需要一个数组,而不是一个列表。您可能打算在那里使用 arr 而不是 ar

关于c++ - 如何修复 'No match for operator[]' 错误 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55559718/

相关文章:

c++ - 从专门的模板结构/类继承

C++ 使用指向未定义函数的指针进行编译和链接

c++ - VS2012-类接口(interface)设计: Private Member Funcs Positioning/Hiding

c++ - 需要使用 Makefile 编译包含 C++ 和 C 代码的程序

c++ - 从 vector<BSTR> 获取指向 BSTR 的指针

c++ - VS2010 : Temporaries can't be bound to non-const references

c++ - 传递文本文件而不是用户输入作为命令行参数

c++ - 如何使可变 lambda 捕获列表的某些成员成为 const?

c++ - 是否有关于使用 C++ 编译器进行 C 编译的结论性研究/实验?

c++ - 在没有 vector ,指针的情况下在c++中在运行时增加数组大小