嘿大家。请看我的代码,我得到了一些错误,我无法自己解决。
DP_Wine_problem.cpp:42:17: error:不匹配“operator[]”(操作数类型为'std::__cxx11::list‘和'long long int')
if(vx>vs)
^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);
^
#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;
}发布于 2020-05-05 07:24:38
像no match for这样的错误消息意味着,方法或运算符根本不存在,或者有这样的方法,但是具有不同的参数类型。
查看std::list,您可以看到,这是第一种情况,无法找到用于std::list的operator[]。
以防万一,v[1]不是列表中的第一个元素,而是v[0]。另外,v[n]不是最后一个元素。
如果代码的目的是计算i * min(first, last)的和,您可以尝试使用std::list::front()和std::list::back()来代替
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()方法。
https://stackoverflow.com/questions/61607722
复制相似问题