首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不匹配operators[]

不匹配operators[]
EN

Stack Overflow用户
提问于 2020-05-05 07:16:29
回答 1查看 458关注 0票数 1

嘿大家。请看我的代码,我得到了一些错误,我无法自己解决。

DP_Wine_problem.cpp:42:17: error:不匹配“operator[]”(操作数类型为'std::__cxx11::list‘和'long long int')

if(vx>vs)

代码语言:javascript
复制
^

DP_Wine_problem.cpp:42:22: error:不匹配“operator[]”(操作数类型为'std::__cxx11::list‘和'long long int')

if(vx>vs)

^

DP_Wine_problem.cpp:44:26: error:不匹配“operator[]”(操作数类型为'std::__cxx11::list‘和'long long int')

res+=i*(vs);

^

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <list>
#include <string>
using namespace std;
#define ll long long int
#define mod 1e9+7

int main()
{

    ll n;
    cin>>n;
    list<ll> v;
    ll j;
    v.push_back(0);
    for(ll i=0;i<n;i++)
    {
        cin>>j;
        v.push_back(j);
    }
    ll s=n;
    ll res=0;
    for(ll i=1;i<=n;i++)
    {
        if(v[1]>v[s])
        {
            res+=i*v[s];
            v.pop_back();
        }
        else
        {
            res+=i*v[1];
            v.pop_front();
         }
         s--;
     }
     cout<<res<<endl;
return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-05 07:24:38

no match for这样的错误消息意味着,方法或运算符根本不存在,或者有这样的方法,但是具有不同的参数类型。

查看std::list,您可以看到,这是第一种情况,无法找到用于std::listoperator[]

以防万一,v[1]不是列表中的第一个元素,而是v[0]。另外,v[n]不是最后一个元素。

如果代码的目的是计算i * min(first, last)的和,您可以尝试使用std::list::front()std::list::back()来代替

代码语言:javascript
复制
for (long long i = 1; i <= n; ++i) {
    if (v.front() > v.back()) {
        res += i * v.back();
        v.pop_back();
    } else {
        res += i * v.front();
        v.pop_front();
    }
}

如果您想要或者必须使用operator[],我宁愿使用std::deque。这个容器既允许随机访问(operator[]),也提供pop_back()pop_front()方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61607722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档