作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以我得到了这个数组: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]));
有关但我不知道如何修复它。
最佳答案
首先,您同时使用ar
和arr
,而arr
是一个数组而ar
是一个列表.这既让读者感到困惑,也让代码作者(事实证明)感到困惑。
在 C++ 中,std::list 没有随机访问。您不能使用 ar[]
,因为没有为列表定义 operator[]。此外,largestOfArray
需要一个数组,而不是一个列表。您可能打算在那里使用 arr
而不是 ar
。
关于c++ - 如何修复 'No match for operator[]' 错误 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55559718/
我是一名优秀的程序员,十分优秀!