J'essaie d'ajouter des valeurs à un vecteur 2D en utilisant les deux indices. Lorsque je lance mon programme, je reçois le message Windows indiquant que le programme a cessé de fonctionner. L'utilisation de Dev-C++ pour le débogage a montré qu'il y avait une erreur de segmentation (je ne suis pas sûr de ce que cela signifie). S'il vous plaît ne suggérez pas d'utiliser des tableaux, je dois utiliser des vecteurs pour cette affectation.
#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
}
}
}
J'ai créé un scénario de test dans lequel je souhaite remplir une matrice 3X3 avec la valeur 5. Je suppose que cela a quelque chose à voir avec la taille du vecteur 2D non spécifiquement définie. Comment pourrais-je remplir un vecteur 2D avec des valeurs en utilisant les indices?
Comme cela est écrit, c'est problématique, vous essayez d'écrire sur un vecteur pour lequel vous n'avez pas encore alloué de mémoire.
Option 1 - Redimensionnez vos vecteurs à l'avance
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;
}
}
Option 2 - Dimensionnez votre vecteur lorsque vous le déclarez
vector<vector<int>> matrix(4, vector<int>(4));
Option 3 - Utilisez Push_back
pour redimensionner le vecteur si nécessaire.
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);
}
Vous n'avez alloué aucun espace pour votre vecteur 2D. Donc, dans votre code actuel, vous essayez d'accéder à de la mémoire qui n'appartient pas à l'espace mémoire de votre programme. Cela entraînera une erreur de segmentation.
essayer:
vector<vector<int> > matrix(4, vector<int>(4));
Si vous voulez donner la même valeur à tous les éléments, vous pouvez essayer:
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;
}