c++ - C++中的初始化二维 vector

标签 c++ vector

我想通过二维 vector 从用户那里获取二维矩阵的输入。但是当我像下面那样做时,程序崩溃了!!!但是为什么?

int m, n;
cin>>m>>n;

vector<vector<int> > v;

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

根据我的代码,解决方案是什么。

最佳答案

v[i].push_back(a); 的位置在 for 中调用循环, vector v为空并使用 v[i]将导致未定义的行为。

您的代码应首先 push_back一个vector<int> :

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

另一种方法是初始化 vector v明确大小 m :

int m, n;
cin>>m>>n;
vector<vector<int> > v(m);

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

关于c++ - C++中的初始化二维 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36786374/

相关文章:

vector - 为什么(=(vector nil)(vec nil))返回false?

c++ - std::stack 损坏返回值

c# - OpenCV C++ vector DMatch 到 C#

c++ - 为什么我在为 vector <int> 实现这个简单的散列时出错?

c++ - 我应该如何从函数返回一个对象?

vector - 为什么 Clojure 向量函数结果不包括停止值?

c++ - 与 std::inserter 相比,std::back_inserter 有什么好处?

c++ - Bjarne Stroustrup 说我们必须避免链表

c++ - 除非首先创建,否则首先创建的对话框将变得无响应?

c++ - 在 Boost.Asio 中释放一个套接字(与分配相反),或者不转移所有权