Définir la taille d'un tableau (Matrice) par l'utilisateur en C+

Signaler
-
 Mus -
Bonjour,
Et bien je veut bien savoir s'il y a une méthode pour définir un tableau en laissant à l'utilisateur le choix d'introduire le nombre des cases.
Par exemple:
cin>>n;
char tab[n];

Merci
A voir également:

9 réponses

Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
109
Bonjour.

Oui, il suffit de lui demander:
#include <vector>

int main()
{
  int size = 0;
  std::vector<int> tab;

  std::cout << "Taille ? ";
  std::cin >> size;

  tab.resize(size);

  return 0;
}


Je recommande néanmoins l'utilisation de ".push_back" d'un "vector", qui te permet d'ajouter des éléments sans se soucier de la taille.

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Salut, merci pour votre réponse.
Maintenant, une 2ème question se pose:
pour effectuer un traitement (comme l'affectation) sur ce type, comment je doit faire? J'ai essayé d'affecter comme suit : tab[i]=............ mais il n'en accepte pas.
Merci encore.
Oh merci, c'est vraiment génial.
Est_ce utile même pour les matrices ?
Si oui, comment je doit faire?
J'ai essayé cette instruction : tab.resize(size , size);
mais ça ne marche pas.
Merci encore.
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
109
Exemple d'utilisation:

1) Affectation après une taille donnée (bof, pas terrible):
#include <vector>

int main()
{
  int size = 3;
  std::vector<int> tab;
  tab.resize(size);
  tab[0] = 789;
  tab[1] = 35;
  tab[2] = 41;

  for (int i = 0; i < tab.size(); ++i)
    std::cout << tab[i] << std::endl;

  return 0;
}


2) Ajout d'éléments. La taille du tableau est dynamique (mieux !):
#include <vector>

int main()
{
  int size = 3;
  std::vector<int> tab;
  tab.push_back(789);
  tab.push_back(35 );
  tab.push_back(41);

  for (int i = 0; i < tab.size(); ++i)
    std::cout << tab[i] << std::endl;

  return 0;
}



Améliorer votre expérience CodeS-SourceS avec ce plugin:
ttp://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Je suis d'accord. Mais pour un tableau multidimensionnel, comment faire la déclaration(2 dimensions par exemple)?
Merci beaucoup
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
109
Faudrait peut être préciser ta question dès le début...

Tu fais soit un std::vector< std::vector<int> > ou alors tu utilises un tableau simple pour y stocker des dimensions. Via la formule: x + y * taille;
Un exemple ici:
https://github.com/cptpingu/game/blob/master/src/Core/Array2D.hh

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Non non, ce n'est pas ce que je cherche
J'ai bien compris votre première réponse.
La question maintenant: est-ce qu'on peut faire la même chose en modifiant cette instruction:
std::vector< std::vector<int> >
en
std::vector< std::vector<int, int> >
Messages postés
3813
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
12 juin 2020
109
Si si, c'est exactement ce que tu recherches !
Pour faire un tableau à double dimension (pour une matrice par exemple), ma réponse précédente répond à ta question...

"std::vector< std::vector<int, int> >" n'a aucun sens (et est d'ailleurs impossible). C'est bien "std::vector< std::vector<int> >" que tu veux. Maintenant, comme c'est un peu chiant de manier un "std::vector< std::vector<int> >", je te proposais une classe qui faisait ce boulot pour toi.

Relis attentivement ma réponse précédente. Et cherche des exemples de "std::vector< std::vector<int> >" sur le net. Tu peux aussi utiliser la classe que je te propose, au choix.

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Ok, je vais relire l'exemple de la classe.
Merci beaucoup pour votre aide.
Salut