不能将结构分配给向量的索引吗? [关闭]

Posted

技术标签:

【中文标题】不能将结构分配给向量的索引吗? [关闭]【英文标题】:Is it not possible to assign a struct to an index of a vector? [closed] 【发布时间】:2019-08-16 19:22:40 【问题描述】:

我有以下代码,其中我为我的结构创建了一个构造函数,并且我试图将结构分配给向量容器的特定索引。

我收到了一个错误,但难道不能做这样的事情吗?

#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;

对于任何想了解代码的人,这是我要解决的问题:link

【问题讨论】:

vvector&lt;int&gt;。所以v[1] 会给你一个int。然后你在那个int上做[0]......你想在那里做什么? (这是编译器告诉你的很好的人类版本) ***.com/questions/31816095/… #include&lt;bits/stdc++.h&gt;loads the gun。 using namespace std;takes off the safety。对此要非常小心。 相关/欺骗您的新错误:***.com/questions/29920394/… @KaranSingh 你应该看到包括整个标准库在内对你的构建时间有什么影响。在我的盒子上,这需要 9s.410ms。使用正确的标题,782ms。您最多可以节省 2 次编译的输入。 【参考方案1】:

你的错误就在这里:

vector<vals> dp(n+1);

但是为什么呢?你不是无害地创建了n+1vals 的向量吗?嗯,这就是您至少尝试做的事情。

但是,当您为 vals 创建自己的构造函数时--噗!--您将不再获得自动为您创建的默认构造函数。

猜猜你想调用哪个构造函数来为你的向量实例化所有vals?默认一个!那是不存在的!

要解决这个问题,你可以显式创建一个默认构造函数,或者在创建vals时强制向量调用你的构造函数:

vector<vals> dp(n+1, vals(0,0,0));

【讨论】:

以上是关于不能将结构分配给向量的索引吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何简单地分配不同结构的向量?

C中结构中的指针-如何将给定的void指针的值分配给结构中的指针[关闭]

将字符串*分配给char * c ++ [关闭]

MATLAB 结构体数组赋值

将结构添加到字节向量,然后添加另一个[关闭]

分配给具有数组类型的表达式并请求非结构或联合中的成员[关闭]