在C++中给二维向量赋值

6
#include<bits/stdc++.h>
using namespace std;
main()
{
    vector<vector<int> > v;
    for(int i = 0;i < 3;i++)
    {
        vector<int> temp;
        for(int j = 0;j < 3;j++)
        {
            temp.push_back(j);
        }
        //cout<<typeid(temp).name()<<endl;
        v[i].push_back(temp);
    }
 }

我试图给一个二维向量赋值。但是我遇到了以下错误:

No matching function for call to 
std ::vector<int>::push_back(std::vector<int> &)

4
将元素添加到向量的末尾。(v.push_back(...) translates to "Add an element to the end of a vector.") - Some programmer dude
1
v[i] 访问越界。向量中没有条目。 - M.M
v.push_back(vector) and v[i].push_back(int) - Retired Ninja
“2D向量”只是一个向量。因此,您需要想出如何向向量添加元素。就这样。 - juanchopanza
只是一个小提示,如果你正在使用c++11,你可以使用emplace_back。 - Lefsler
7个回答

8

问题:你的向量 v 是空的,所以在向 v 中 push 任何向量之前,你无法访问 v[i]

解决方案:将语句 v[i].push_back(temp); 替换为 v.push_back(temp);


5
您可以按照以下步骤进行操作:
#include<bits/stdc++.h>
using namespace std;
int main()
{
    vector<vector<int> > v;
    for(int i = 0;i < 3;i++)
    {
        vector<int> temp;
        for(int j = 0;j < 3;j++)
        {
            temp.push_back(j);

        }
        //cout<<typeid(temp).name()<<endl;
        v.push_back(temp);
    }
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 3; j++){
            cout << v[i][j] << " ";
        }
        cout << endl;
    }
 }

5

v[0]为空,你应该使用v.push_back(temp);

你可以使用at方法来避免这个错误:

for(int i = 0; i < 3; i++){
   vector <vector <int> > v;
   vector <int> temp;
   v.push_back(temp);
   v.at(COLUMN).push_back(i);
}

然后您可以通过以下方式访问它:

v.at(COLUMN).at(ROWS) = value;

4
v[i].push_back(temp);

应该是

v.push_back(temp);

v 是类型为 std::vector<vector<int>> 的变量,v[i] 是类型为 std::vector<int> 的变量。


4
你应该使用v而不是v[i]。(C++11)
#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char* argv[])
{
    vector<vector<int> > v;
    for(int i = 0;i < 3;i++)
    {
        vector<int> temp;
        for(int j = 0;j < 3;j++)
        {
            temp.push_back(j);
        }

        v.push_back(temp);
    }

    for (auto element: v) {
        for (auto atom: element) {
            cout << atom << " ";
        }
        cout << "\n";
    }

    return 0;
}

3

可以这样理解:"我该如何将类型为T的变量temp插入到std::vector<T>中呢?" 在您的情况下,问题即为:

v.push_back(temp);

T本身是一个向量并不重要。要打印出你的向量(向量),你可以使用两个 for 循环:

for (std::size_t i = 0; i < v.size(); i++){
    for (std::size_t j = 0; j < v[i].size(); j++){
        std::cout << v[i][j] << ' ';
    }
    std::cout << std::endl;
}

0

只管去做...

#include<bits/stdc++.h>
using namespace std;
int main()
{
    vector<vector<int> > v;
    for(int i = 0; i < 3; i++)
    {
        vector<int> temp;
        for(int j = 0; j < 3; j++)
        {
            temp.push_back(j);
        }
        v.push_back(temp);//use v instead of v[i];
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接