C ++错误:无法匹配调用&#39;(std :: list <int>)(int&amp;)&#39;

时间:2017-12-08 00:46:34

标签: c++

我有一个脚本来计算列表元素的最高总和,同时保留模式:更高 - 更低 - 更高 - 更低 - 更高等等。

#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&)'

我做错了什么?

2 个答案:

答案 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获取第一个元素的迭代器。要遍历,请使用赋值,递增(++)和递减(--)运算符。要访问元素的值,请使用解除引用运算符(*)。