C++ 使用索引为二维向量赋值
我试图通过使用两个索引向2D向量添加值。当我运行我的程序时,我收到windows消息说程序已经停止工作。使用Dev-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
#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;i for(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;
}