我正在编写的程序的一部分要求我建立向量的向量,以形成尺寸为5的方阵。尝试打印向量时似乎没有输出,我也不知道为什么。有小费吗?
#include<string>
#include<cstdlib>
#include<fstream>
#include<vector>
#include<iostream>
using namespace std;
int main(){
int rows=5;
vector< vector<double> > identity; // declare another vector of vectors, which initially will be
// the identity matrix of the same dimensions as 'matrix'.
for (int j=0; j<rows; j++) {//set up the identity matrix using the Kronecker Delta relation. If row == col, then =1. Else =0.
vector<double> temp2; // temporary vector to push onto identity
identity.push_back(temp2);
for (int k=0; k<rows; k++){
if(j==k) {
temp2.push_back(1);
}
else {
temp2.push_back(0);
}
}
identity.push_back(temp2);
}
// print out identity
for (int j=0; j<identity.size(); j++) {
for (int k=0; k<identity[0].size(); k++) {
cout<<' '<<identity[j][k];
}
cout<<endl;
}
}
最佳答案
vector<double> temp2; // temporary vector to push onto identity
identity.push_back(temp2);
for (int k=0; k<rows; k++){
if(j==k) {
temp2.push_back(1);
当您将temp2推入顶层向量时,它将被复制。
此后更改temp2对该副本无效,该副本由标识向量拥有。
现在,您在填充temp2之后确实再次推送了temp2,但identity中的第一项将是大小为零的默认初始化向量。您实际填充的结构如下所示:
{{},
{1, 0, 0, 0, 0},
{},
{0, 1, 0, 0, 0},
{},
{0, 0, 1, 0, 0},
{},
{0, 0, 0, 1, 0},
{},
{0, 0, 0, 0, 1}}
所以,你的循环
for (int j=0; j<identity.size(); j++) {
for (int k=0; k<identity[0].size(); k++) {
永远不会做任何事情,因为
identity[0].size()
始终为零。tl; dr:
只需删除第一行
identity.push_back(temp2)
。关于c++ - 使用 vector C++的 vector 建立单位矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20151749/