当前位置: 首页 > 知识库问答 >
问题:

我的向量的向量有什么问题?

董胡媚
2023-03-14
class Graph {


public:

    std::vector<std::vector<int>> adj;

    Graph(int V) {
        std::vector<std::vector<int> > adj(V, std::vector<int>());
    }

    void insert_edge(int v, int u);
    void print_adjacencylist();


};


void Graph::insert_edge(int v, int u) {

adj[v].push_back(u);


}
Graph G(8);

G.insert_edge(4, 1);

我试图创建一个图,它将有V个顶点。我正在使用向量的向量来表示图(作为邻接列表)。我的图中的节点是从0到V-1的编号,所以adj向量的索引代表了节点的数量。除非我搞错了,adj[u]代表一个向量,所以我应该可以使用adj[u].push_back(v)将顶点v推入顶点u的邻接列表中。所以在我的例子中,adj[4]应该得到与节点4相邻的顶点所在的向量,而.push_back(1)

这不会发生的。我想这与我没有正确初始化所有内容有关,但我试过无数次(甚至试过使用for循环将一个向量推回到adj向量的每个索引),但我总是得到同样的错误。

共有1个答案

佟阳云
2023-03-14

您的数据成员向量为空,并且您正在越界访问它。这是因为您默认在构造函数中初始化了它。您还初始化了一个在任何地方都无法使用的局部变量:

Graph(int V) {
  // Oops! Local variable adj, nothing to do with member
  // of same name
  std::vector<std::vector<int> > adj(V, std::vector<int>());
}

您想要做的是初始化数据成员adj,您可以在构造函数初始化列表中执行此操作

Graph(int V) : adj(V, std::vector<int>()) {}

或者,如果键入较少,

Graph(int V) : adj(V) {}
 类似资料:
  • 我这样声明了'car'对象: 当我运行该程序时,这段代码给我一个错误,它说“无法分配字段”color“,因为”car[i]“为空”: (“color”属性位于类“vehicles”中)

  • 下面的代码为什么编译? std::move的文档说 执行此操作后,“移动自”范围中的元素仍将包含适当类型的有效值,但不一定与移动前的值相同。 所以这实际上可以改变对象foo2,即使它声明为const。为什么这样做有效?

  • 防锈文件中的封闭部分有这个例子。 文件上说 然而,如果你的关闭需要它,铁锈将占据所有权,并改变环境 上面的代码导致这个错误 医生说 Vec对其内容拥有所有权,因此,当我们在闭包中引用它时,我们必须获得nums的所有权。这就像我们将nums传递给一个拥有它的函数一样。 我不明白为什么闭包不只是借用向量的所有权,就像在本例中从文档中所做的那样 这个闭包,加上_num,指的是其作用域中的let绑定:nu

  • 我正在尝试将嵌套列表结构转换为DataFrame。该列表类似于以下内容(它是来自解析的JSON的序列化数据,使用httr包读取)。 编辑:我最初的示例数据太简单了。实际数据是不完整的,这意味着并非每个对象都存在所有变量,并且一些列表元素是空的。我编辑了数据来反映这一点。

  • 矢量或者说向量,可以通过2~4个分量表示一个向量,比如通过vec3(1,0,0)表示三维空间中一个沿着x轴正方向的三维方向向量,如果你有高中数学的基础,应该对向量有一定的了解,对于三维坐标的相关几何运算也有一定的概念。 关键字 数据类型 vec2 二维向量,具有xy两个分量,分量是浮点数 vec3 三维向量 ,具有xyz三个分量,分量是浮点数 vec4 四维向量 ,具有xyzw四个分量,分量是浮点

  • 我试图实现一个无隐层神经网络来破解MNIST数据集。 我使用sigmoid作为激活函数,交叉熵作为损失函数。 为了简单起见,我的网络没有隐藏层,只有输入和输出。 这是我实现反向传播算法的一部分,但它没有按预期工作。损失函数的下降速度非常慢(我尝试了学习率从0.001到1的变化),准确度永远不会超过0.1。 输出如下: