没有用于调用 'std::vector<std::vector<int> >::push_back(int)'

时间:2021-02-20 16:56:24

标签: c++ vector

我制作了一个向量向量,我想从用户那里获取值。我只是不知道它有什么问题

为什么我不能在这里使用 push_back() 如果您有任何其他方法,请告诉。

vector<vector<int>>  v;
for(int i=0;i<n;i++)
{
   v.push_back(i+1);
   for(int j=0;j<n;j++)
    {
        v[i].push_back(j+1);
    }
}

这样做会给我带来错误

error: no matching function for call to 'std::vector<std::vector<int> >::push_back(int)'
v.push_back(i+1);

3 个答案:

答案 0 :(得分:1)

您声明了一个 std::vector<std::vector<int>> 类型的向量。

vector<vector<int>>  v;

这意味着向量 v 的元素具有类型 std::vector<int> 而不是 int

所以编译器会为此语句发出错误信息

v.push_back(i+1);

这没有意义。

您可以使用这样的调用,前提是类模板 std::vector 具有从整数表达式到 std::vector 类型的隐式收缩器。然而这样的构造函数是显式的

explicit vector(size_type n, const Allocator& = Allocator());

因此没有从参数表达式提供给参数 n 到类型 std::vector<int> 的隐式转换。

看来你的意思是以下

vector<vector<int>>  v;
for(int i=0;i<n;i++)
{
   v.resize(i+1);
   for(int j=0;j<n;j++)
    {
        v[i].push_back(j+1);
    }
}

答案 1 :(得分:0)

这是因为 v 是一个包含整数向量的向量。这意味着你不能 push_back 一个整数,因为它需要一个 int 向量。

vector<vector<int>>  v;
for(int i=0;i<n;i++)
{
    vector<int> v2;
    for(int j=0;j<n;j++)
    {
        v2.push_back(j+1);
    }
    v.push_back(v2);
}

现在考虑这段代码,它会起作用,因为您正在创建一个新的整数向量 v​​2。如果您将 v2 推送到 v,它将起作用,因为 v 需要一个 int 向量用于 push_back。

答案 2 :(得分:0)

人们在回答时喜欢把事情复杂化。这里的想法是您在向量中创建了一个向量。所以第一个向量以一个向量作为输入,而第二个向量以一个“int”为输入。因此,您不应该在 first 向量中压入整数,而应该在整数向量中压入。