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

Mus - 27 nov. 2014 à 08:06
 Mus - 27 nov. 2014 à 19:27
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

9 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
27 nov. 2014 à 11:06
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
0
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.
0
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.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 27/11/2014 à 13:28
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je suis d'accord. Mais pour un tableau multidimensionnel, comment faire la déclaration(2 dimensions par exemple)?
Merci beaucoup
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 27/11/2014 à 18:01
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
0
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> >
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 27/11/2014 à 19:05
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
0
Ok, je vais relire l'exemple de la classe.
Merci beaucoup pour votre aide.
Salut
0
Rejoignez-nous