我有一个脚本来计算列表元素的最高总和,同时保留模式:更高 - 更低 - 更高 - 更低 - 更高等等。
#include <algorithm>
#include <stdio.h>
#include <list>
using namespace std;
int main() {
int n=0;
bool g = false;
int d = 1000000;
list<int> a(d,0);
int b;
for (int x=0; x<n; x++) { //load the list elements
scanf("%d", &b);
a.push_back(b);
}
for (int i=0; a(n) == a(n+1); i++) {
a.remove(n+1); //this is to remove any (consecutive) duplicates
}
if (a(n) > a(n+1)) {
g = false;
} else {
g = true;
}
while (n+1 < d) {
if (g) {
if (!(a(n) < a(n+1))) {
a.remove(n+1);
continue;
} else {
n = n+1;
g = !g;
continue;
}
} else {
if (!(a(n) > a(n+1))) {
a.remove(n+1);
} else {
n = n+1;
g = !g;
continue;
}
}
}
long long sum = 0 ;
for (int i = 0 ; i < a.count(); i++) {
sum += a(i);
}
printf("%lld ", sum);
return 0;
}
但是,在编译尝试时,它会在我尝试比较列表元素的任何地方抛出no match for call to '(std::list<int>) (int&)'
。
我做错了什么?
答案 0 :(得分:3)
a(n)
无效。 std::list
没有调用操作符(或下标操作符,这是我假设你打算使用的)。 std::list
不提供随机访问权。
如果您需要随机访问,请使用提供它的容器,例如std::vector
。然后,您可以使用a[n]
表示法访问项目。
答案 1 :(得分:0)
a(n)
表示调用函数调用操作符std::list::operator()(int&)
,其中n
为其参数。错误no match for call to '(std::list<int>) (int&)'
是因为std::list
没有呼叫运营商。
列表不支持随机访问,而vector具有operator[]
随机访问权限。使用向量,向量n
的随机访问元素a
变为a[n]
。
要遍历列表,请使用列表iterator。使用std::list::begin
获取第一个元素的迭代器。要遍历,请使用赋值,递增(++
)和递减(--
)运算符。要访问元素的值,请使用解除引用运算符(*
)。