首页 > 解决方案 > C++ 通过 1d 向量的函数初始化 2d 向量

问题描述

这就是我所拥有的:

vector<int> A {5,4,3,1};
vector<int> B {3,1};

我想将 2d 向量 C 制作为 5*5 2d 向量,填充为 0.0,所以我尝试了这个:

vector<vector<double>> C((A.size() + 1), vector<double>((B.begin() + 2),0.0));

但这是我遇到的错误。

There is no instance of a constructor with a matching C++ argument list.
            (std::_Vector_iterator<std::_Vector_val<std::conditional_t<true, std::_Simple_types<int>, std::_Vec_iter_types<int, size_t, ptrdiff_t, int *, const int *, int &, const int &>>>>, double)

我无法理解错误的内容。请问有什么问题以及如何解决?

标签: c++vector

解决方案


vector<vector<double>> C((A.size() + 1), vector<double>((B.begin() + 2),0.0));

在这里,您正在调用 std::vector 的构造函数(cppreference上的第 3 个):

constexpr vector( size_type count,
                  const T& value,
                  const Allocator& alloc = Allocator());

你可以看到它需要大小和价值。在嵌套向量而不是传递大小中,您将迭代器传递给开头并将其递增 2。我认为你想要的是B.size()而不是B.begin(). 此外,如果它必须是 5 x 5,您可以简单地执行以下操作:

std::vector<std::vector<double>> C(5, std::vector<double>(5, 0.0));

推荐阅读