matrice multidimenssionnelle - C++ - Programmation
Marsh Posté le 22-09-2014 à 11:48:50
en général, en C++, on évite les tableaux C.
Ce que tu veux faire est tout à fait possible, de la manière dont tu le décris, mais attention à la taille de tes données : tu risques de faire assez facilement exploser ta pile avec des tableaux de ce genre.
Marsh Posté le 22-09-2014 à 12:01:55
theshockwave a écrit : en général, en C++, on évite les tableaux C. |
merci pour ta réponse.
chaque paramètre de ma fonction est de taille 36!!
Ya t-il une autre manière de procéder?
on peut déclarer une matrice à 2 dimensions comme un vecteur de vecteur, est ce possible de déclarer ma fonction comme un vecteur de vecteur de vecteur de vecteur??!!
désolée si je dis des bêtises, car je suis débutante en C++!
Marsh Posté le 22-09-2014 à 12:59:25
ta mémoire peut être considérée de manière linéaire. Quand tu fais des tableaux de tableaux de tableaux, au final, tu restes avec une succession d'adresses utilisées et c'est une poignée de multiplications et d'additions pour trouver l'adresse qui correspond à tes coordonnées.
Tu pourrais tout à fait te contenter d'un vector<double> que tu redimensionnes à 36*36*36*36 et faire ce petit peu de maths par toi-même.
L'avantage de vector, c'est que tes données vont être allouées sur le tas, et non pas sur la pile.
Sinon, si ton compilateur n'est pas trop vieux, alors tu peux sans doute utiliser std::array pour faire le boulot. Tu auras toujours besoin de faire attention à la taille de ta pile, par contre.
Apparamment, tu n'es pas à l'aise avec la pile et le tas. Les variables que tu déclares dans le corps d'une fonction vont prendre de la mémoire sur la pile. Si tu veux utiliser le tas, tu dois passer par des mécanismes d'allocation dynamique manuellement (new et delete) ou automatiquement (std::unique_ptr avec std::make_unique, ou std::shared_ptr avec std::make_shared)
Marsh Posté le 22-09-2014 à 13:09:57
theshockwave a écrit : ta mémoire peut être considérée de manière linéaire. Quand tu fais des tableaux de tableaux de tableaux, au final, tu restes avec une succession d'adresses utilisées et c'est une poignée de multiplications et d'additions pour trouver l'adresse qui correspond à tes coordonnées. |
merci bcp pour toutes tes explications.
Marsh Posté le 22-09-2014 à 14:33:52
Quand c'est un tableau de valeurs numériques, il n'y a aucun mal a utiliser la pile pour un gros tableau multidimensionnel, a condition qu'il ne soit pas instancié à de multiple reprises.
Il faudrait en savoir un peu plus sur ton code et l'utilisation dudit tableau.
Par contre, tu risques de dépasser les limites mémoires par défaut de ton compilateur, mais vu la taille de ton tableau (15 a 20 Mo?) et celle des mémoires vives des bécanes modernes, il suffira juste d'augmenter la taille de la pile, ce qui se fait avec une option de ton compilateur.
Un des intérêts des tableaux à la C en C++, c'est qu'ils peuvent être de taille fixe, mais variable entre deux appels:
Code :
|
En sortie:
01
12
012
123
01
12
23
A+,
Marsh Posté le 22-09-2014 à 15:01:43
Je crois que tu as confondu pile et tas dans ton message
Edit : c'est vil, d'éditer les quotes dans les messages des autres
Marsh Posté le 22-09-2014 à 15:14:16
theshockwave a écrit : |
Corrigé. Mentalement, j'utilise que stack et heap, et quand je pense stack, et que je veux franciser, 3 fois sur 4, je me fais avoir avec les voyelles: stack, son a, d'ou mon tas fautif (et heap, son i, d'ou un pile fautif luis aussi)
A+,
Marsh Posté le 23-09-2014 à 12:40:31
theshockwave a écrit : |
Ah zut, c'est involontaire, je croyais l'avoir corrigé dans le mien
A+,
Marsh Posté le 22-09-2014 à 11:26:03
Bonjour à tous,
j'ai une fonction à plusieurs paramétrés f(k,t, y, w), je dois déclarer cette fonction comme une matrice à plusieurs paramètres (ou un tableau multidimensionnel).
est possible de l'écrire de la façon suivante en c++:
merci de m'aider sur ce petit pb et m'orienter vers des liens qui peuvent m'aider.
merci d'avance pour vos réponses.
---------------
etudoc