Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用索引为二维向量赋值_C++_Vector_Multidimensional Array - Fatal编程技术网

C++ 使用索引为二维向量赋值

C++ 使用索引为二维向量赋值,c++,vector,multidimensional-array,C++,Vector,Multidimensional Array,我试图通过使用两个索引向2D向量添加值。当我运行我的程序时,我收到windows消息说程序已经停止工作。使用Dev-C++进行调试表明存在分段错误(我不确定这意味着什么)。请不要建议使用数组,我必须使用向量 #include <iostream> #include <vector> using namespace std; int main(int argc, char** argv) { vector< vector<int> > matr

我试图通过使用两个索引向2D向量添加值。当我运行我的程序时,我收到windows消息说程序已经停止工作。使用Dev-C++进行调试表明存在分段错误(我不确定这意味着什么)。请不要建议使用数组,我必须使用向量

#include <iostream>
#include <vector>
using namespace std;

int main(int argc, char** argv) { 

vector< vector<int> > matrix;
cout << "Filling matrix with test numbers.";
for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {

        matrix[i][j] = 5; // causes program to stop working

    }
}
}
#包括
#包括
使用名称空间std;
intmain(intargc,字符**argv){
向量<向量>矩阵;

cout如前所述,这是有问题的,您试图写入一个尚未分配内存的向量

选项1-提前调整向量大小

vector< vector<int> > matrix;
cout << "Filling matrix with test numbers.";
matrix.resize(4);  // resize top level vector
for (int i = 0; i < 4; i++)
{
    matrix[i].resize(4);  // resize each of the contained vectors
    for (int j = 0; j < 4; j++)
    {
        matrix[i][j] = 5;
    }
}

您尚未为2d向量分配任何空间。因此,在当前代码中,您试图访问一些不属于程序内存空间的内存。这将导致分段错误

尝试:

向量矩阵(4,向量(4));
如果要赋予所有元素相同的值,可以尝试:

 vector<vector<int> >  matrix(4, vector<int>(4,5)); // all values are now 5
向量矩阵(4,向量(4,5));//所有值现在都是5
向量v2d1(3,7);
向量v2d2(4,v2d1);
对于(int i=0;ifor(int j=0;j)为什么需要在for循环中有矩阵[i]。调整(4)的大小?因为有一个向量向量。所以每个内部向量的大小都需要为4,那么外部向量包含其中的4个内部向量。在我的例子中,我希望这个2D向量表示一个3x3的矩阵。那么它不应该是矩阵[i]。调整(3),外部向量将包含其中的3个?是的,我刚刚选择了4个,因为这是您在原始帖子中所做的。3x3矩阵的有效索引为
[0]
[1]
,和
[2]
用于行和列。因此您应该只循环
i=0;i<3;++i
@Calpratt也是的……看起来我需要去喝更多的咖啡,我今天犯了错误:/Hello Mohammad,欢迎来到stackoverflow。请添加您答案的主要思想和更改,而不仅仅是代码。
vector< vector<int> > matrix;
cout << "Filling matrix with test numbers.";
for (int i = 0; i < 4; i++)
{
    vector<int> temp;
    for (int j = 0; j < 4; j++)
    {
        temp.push_back(5);
    }
    matrix.push_back(temp);
}
 vector<vector<int> >  matrix(4, vector<int>(4));
 vector<vector<int> >  matrix(4, vector<int>(4,5)); // all values are now 5
vector<int> v2d1(3, 7);
    vector<vector<int> > v2d2(4, v2d1);
    for (int i = 0; i < v2d2.size(); i++) {
        for(int j=0; j <v2d2[i].size(); j++) {
                    cout<<v2d2[i][j]<<" ";
                }
                cout << endl;
            }