Bonjour à tous et à toutes !
Je fais mes tous premiers pas sur C++ et j'ai houlaaa... au moins quatre jours de recul !
Voilà, j'ai besoin d'avoir un tableau 2D dont on ne connaît pas à l'avance les dimension ni les valeurs au moment de la compilation... Donc j'ai essayé de créer des classes en utilisant std::vector.
On dirait que au moins le constructeur par défaut fonctionne puisque quand je commente l'étape d'impression dans le main je n'ai pas d'erreur. Mais je ne parviens à imprimer le résultat sur la console on dirait que ma méthode print est boîteuse (segmentation fault, core dumped)...
Mais je n'ai pas l'impression de chiper les indices du tableau en dehors de l'intervalle de définition... Quelqu'un aurait-il un avis sur ce qui se trame dans ce petit bout de code ?
Dans le main :
Dans le .h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <iostream> #include <string> #include <vector> #include"Vector2D.h" using namespace std; int main() { Vector2D layer; layer.print(); return 0; }
Dans le .cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #ifndef VECTOR2D_H_INCLUDED #define VECTOR2D_H_INCLUDED #include<vector> class Vector2D { public : Vector2D(); Vector2D(int nrow, int ncol); ~Vector2D(); void print(); private : int m_nrow; int m_ncol; std::vector< std::vector<int> > m_vec ; }; #endif // VECTOR2D_H_INCLUDED
Je sais que il y a des manières plus élégantes de parcourir le vector (d'après ce que j'ai compris les itérateurs sont plus sympas, mais je ne suis pas parvenu à trouver la syntaxe pour parcourir 2 dimensions) mais ce sera pour après, déjà là j'aimerais bien réussir avec ma solution barbare... sauf contre-indication majeure évidemment
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #include<vector> #include<string> #include<iostream> #include "Vector2D.h" using namespace std; Vector2D::Vector2D() : m_nrow(5), m_ncol(5) { std::vector< std::vector<int> > m_vec( m_nrow, std::vector<int>(m_ncol, 0)); } Vector2D::Vector2D(int nrow, int ncol) : m_nrow(nrow), m_ncol(ncol) { std::vector< std::vector<int> > m_vec( m_nrow, std::vector<int>(m_ncol, 0)); } Vector2D::~Vector2D() { // Rien à mettre: pas d'allocation dynamique ! } void Vector2D::print() { for(int i =0; i< m_nrow; i++){ for(int j =0; j< m_ncol; j++){ cout << m_vec[i][j] << " "; } cout << endl; } }
Merci par avance !
Partager