c++ - 不能将结构分配给向量的索引吗?
问题描述
我有以下代码,其中我为我的结构创建了一个构造函数,并且我试图将结构分配给向量容器的特定索引。
我收到一个错误,但不应该做这样的事情吗?
#include<bits/stdc++.h>
using namespace std;
struct vals{
int a;
int b;
int c;
vals(int x, int y, int z)
:a(0), b(0), c(0)
{
a=x;b=y;c=z;
}
};
vals f(int n, vector<vector<int>> &v)
{
vector<vals> dp(n+1);
dp[1]=vals(v[1][0], v[1][1], v[1][2]);
for(int i=2; i<=n; i++)
dp[i] = vals(max(dp[i-1].b, dp[i-1].c)+v[i][0], max(dp[i-1].a, dp[i-1].c)+v[i][1], max(dp[i-1].a, dp[i-1].b)+v[i][2]);
return dp[n];
}
int main()
{
int n;
cin >> n;
int numAct = 3;
vector<vector<int>> v(n+1, vector<int>(numAct));
for(int i=1; i<=n; i++)
for(int j=0; j<3; j++)
cin >> v[i][j];
vals res = f(n, v);
cout << max(res.a, max(res.b, res.c)) << endl;
}
对于任何想了解代码的人,这是我要解决的问题:链接
解决方案
你的错误就在这里:
vector<vals> dp(n+1);
但为什么?你不是在无害地创建一个向量n+1
vals
吗?好吧,这就是您至少要尝试做的事情。
但是第二个你创建你自己的构造函数vals
——噗!--您不再获得自动为您创建的默认构造函数。
猜猜你试图调用哪个构造函数来vals
为你的向量实例化所有这些构造函数?默认一个!那是不存在的!
要解决此问题,您可以显式创建默认构造函数,或者在创建时强制向量调用您的构造函数vals
:
vector<vals> dp(n+1, vals(0,0,0));
推荐阅读
- node.js - WebRTC 视频适用于其他托管网站,但不适用于 Heroku
- python - werkzeug:记录到文件时禁用 bash 颜色
- arrays - 在二维数组中添加元素时得到错误的输出
- java - 如何在 Spring Boot 的每个 REST 调用中使用 Spring Security?
- java - BootstrapMethodError - 找不到类定义
- networking - GCP 不允许带有欺骗性 IP 地址的数据包 - 为什么?
- javascript - 在 componentDidUpdate 完成后更新组件
- python - 如何提高插入的写入速度,pymongo?
- apache-kafka - Kafka 消费者是否从分区中的活动段读取消息?
- css - 如何仅隐藏父类的第一个元素