c++ 中带有 std::vector 的二维数组 - 容器
2d array with std::vector in c++ - container
我试图通过制作 EdgeWeights 向量的向量来制作二维数组(它用于邻接矩阵),但我无法理解嵌套容器的功能。
我正在构建前面提到的结构,
std::vector<std::vector<EdgeWeight> > M =
std::vector<std::vector<EdgeWeight>>(num_edges, std::vector<EdgeWeight>(num_nodes));
但我无法理解正在发生的事情。为什么参数会按照该顺序到达它们执行的位置?此外,一旦创建,我不明白如何访问容器的元素。这是如何工作的?
编辑:我猜测将边权重添加到邻接矩阵是这样的
M.at(u).at(v) = weight; //M is the matrix.
模板 class std::vector
具有以下构造函数
explicit vector(size_type n, const T& value, const Allocator& = Allocator());
explicit vector(size_type n, const Allocator& = Allocator());
第一个构造函数允许定义一个包含 n
个元素的对象,这些元素最初由 value
初始化
而不是定义
std::vector<std::vector<EdgeWeight> > M =
std::vector<std::vector<EdgeWeight>>(num_edges, std::vector<EdgeWeight>(num_nodes));
你可以简单地写
std::vector<std::vector<EdgeWeight> > M( num_edges, std::vector<EdgeWeight>(num_nodes) );
因此,在此定义中,您创建对象 M
,其中包含由 std::vector<EdgeWeight>(num_nodes)
初始化的 std::vector<EdgeWeight>
类型的 num_edges
个元素。也就是说,每个元素依次是使用第二个构造函数创建的 num_nodes
个元素的向量。
您可以将其想象为创建一个具有 num_edges
行和 num_nodes
列的矩阵。只有每一行都是 std::vector<EdgeWeight>
类型的对象,您需要为其调用一个构造函数来指定必须在该行中创建多少列。
我不是很明白你在做什么,但是
std::vector<std::vector<EdgeWeight> > M
这是一个二维向量,它可以包含另一个 EdgeWeight 类型的向量,即
std::vector<EdgeWeight> N;
N.push_back(this value here is passed to the constructor of you EdgeWeight class);
然后:
M.push_back(N);
我试图通过制作 EdgeWeights 向量的向量来制作二维数组(它用于邻接矩阵),但我无法理解嵌套容器的功能。
我正在构建前面提到的结构,
std::vector<std::vector<EdgeWeight> > M =
std::vector<std::vector<EdgeWeight>>(num_edges, std::vector<EdgeWeight>(num_nodes));
但我无法理解正在发生的事情。为什么参数会按照该顺序到达它们执行的位置?此外,一旦创建,我不明白如何访问容器的元素。这是如何工作的?
编辑:我猜测将边权重添加到邻接矩阵是这样的
M.at(u).at(v) = weight; //M is the matrix.
模板 class std::vector
具有以下构造函数
explicit vector(size_type n, const T& value, const Allocator& = Allocator());
explicit vector(size_type n, const Allocator& = Allocator());
第一个构造函数允许定义一个包含 n
个元素的对象,这些元素最初由 value
而不是定义
std::vector<std::vector<EdgeWeight> > M =
std::vector<std::vector<EdgeWeight>>(num_edges, std::vector<EdgeWeight>(num_nodes));
你可以简单地写
std::vector<std::vector<EdgeWeight> > M( num_edges, std::vector<EdgeWeight>(num_nodes) );
因此,在此定义中,您创建对象 M
,其中包含由 std::vector<EdgeWeight>(num_nodes)
初始化的 std::vector<EdgeWeight>
类型的 num_edges
个元素。也就是说,每个元素依次是使用第二个构造函数创建的 num_nodes
个元素的向量。
您可以将其想象为创建一个具有 num_edges
行和 num_nodes
列的矩阵。只有每一行都是 std::vector<EdgeWeight>
类型的对象,您需要为其调用一个构造函数来指定必须在该行中创建多少列。
我不是很明白你在做什么,但是
std::vector<std::vector<EdgeWeight> > M
这是一个二维向量,它可以包含另一个 EdgeWeight 类型的向量,即
std::vector<EdgeWeight> N;
N.push_back(this value here is passed to the constructor of you EdgeWeight class);
然后:
M.push_back(N);