我尝试构建一个7 * 3矩阵,然后在它的值初始化时打印它的元素,但不幸的是程序在运行时终止。如果有一种更简单,更有效的方法来做同样的过程,请告诉我们。
vector< vector<int> > v1;
for(int i = 0;i < 7;i++)
{
for(int j = 0;j < 3;j++)
{
v1[i].push_back(i + j);
cout << v1[i][j] << " ";
}
cout << "\n";
}
答案 0 :(得分:3)
您忘了初始化v1
。
您可以使用以下内容:
std::vector<std::vector<int>> v1(7, std::vector<int>(3));
for (int i = 0; i != 7; ++i) {
for (int j = 0; j != 3; ++j) {
v1[i][j] = i + j;
}
}
// Display
for (const auto& row : v1) {
for (const auto& e : row) {
std::cout << e << " ";
}
std::cout << "\n";
}
答案 1 :(得分:0)
在使用vector<int>
之前,您需要将空v1
放入v1[x]
:
vector< vector<int> > v1;
for(int i = 0;i < 7;i++)
{
v1.push_back(vector<int>());
for(int j = 0;j < 3;j++)
{
v1[i].push_back(i + j);
cout << v1[i][j] << " ";
}
cout << "\n";
}
类型vector< vector<int> > v1;
在某种程度上令人困惑,但两个向量具有不同的含义。第一个是定义v1
的类型,此时,v1
变为空向量。而不是这个,第二个向量只意味着v1
可以容纳的类型。因此,在定义此内容时,v1
已准备就绪,但v1[x]
尚未创建。
答案 2 :(得分:0)
是的,你的代码很明显崩溃了 试试这个:
std::vector< std::vector<int> > v1;
for (int i = 0; i < 7; ++i)
{
v1.push_back(std::vector<int>());
for (int j = 0; j < 3; ++j)
{
v1[i].push_back(i + j);
std::cout << v1[i][j] << " ";
}
std::cout << "\n";
}
编辑:好的......已经回答,为时已晚; - )