Часть программы, которую я пишу, требует от меня создания вектора векторов, чтобы быть квадратной матрицей размеров 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 после его заполнения, но первый элемент в идентификаторе будет инициализированным по умолчанию вектором с нулевым размером. Структура, которую вы на самом деле заполняете, выглядит так:
{{},
{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)
.
temp2
наidentity
?