我正在编写的程序的一部分要求我建立向量的向量,以形成尺寸为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/

10-11 22:27