CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

C++ agrandir un vector

dezq
dezq
Niveau 7
10 décembre 2013 à 19:00:49

Salut
Je stocke les données d'une carte sur un vector comme cela:

std::vector<int> carte ( nb_couches*hauteur*largeur, -1 )

( -1 = case vide )

Le probleme c'est que le nombre de couches ( nb_couches ) varie, il augmente, il descend etc... :(

par exemple quand il augmente de 1, je dois faire plein de push_back:

for (int i = 0; i <= hauteur*largeur; ++i)
{
carte.push_back(-1);
}
nb_couche++;

Si par ex, hauteur = 200 et largeur = 200, alors je dois faire 40 000 push_back ! C'est pas un peu beaucoup ? :(

Est-ce qu'il existe un moyen pour ajouter 40 000 valeurs d'un seul coup ? :(

merci :)

lokilok
lokilok
Niveau 17
10 décembre 2013 à 22:07:44

Ne pas utilisé de vector ?

Une std::map serait plus approprié non ?

papy386
papy386
Niveau 10
11 décembre 2013 à 02:07:53

Bonjour

Je pense aussi que vector n'est pas approprié.

Mais sa serais encore mieux de nous dire ce que tu voulais faire au départ, car je sens l'algorirhme éronné.

godrik
godrik
Niveau 30
11 décembre 2013 à 04:34:38

Le truc est que moralement ce que tu veux c'est un vecteur de table bidimensionel.

dezq
dezq
Niveau 7
11 décembre 2013 à 13:08:34

"Mais sa serais encore mieux de nous dire ce que tu voulais faire au départ, car je sens l'algorirhme éronné."

-->
J'essaye de construire un moteur de jeu isométrique.
Il me faut donc deux tableaux?/vecteurs?/map? bidimensionnels : un de type Sf::Sprite pour l'affichage et un int pour les données.

Les deux sont initialement initialisés a une taille de hauteur*largeur.
Donc un seul couche.

Mais quand par exemple sur l'éditeur de map je vais poser un bloc sur un bloc, je veux que il y a une nouvelle qui se crée.

par exemple une carte de taille 3*3 rempli d'herbe ( = 1), sa couche 0:
111
111
111
Si je pose un autre bloc d'herbe au milieu, une nouvelle couche se crée (0=vide) :
000
010
000
Donc la taille de la carte devient 3*3 + 3*3 soit 18.

Voila en gros ce que j'essaye de faire.

"Une std::map serait plus approprié non ?"

Surement mais je n'ai jamais utilisé de std::map, il faut que je regarde ça ... Sinon c'est quoi la différence entre un std::map et std::vector ?

lokilok
lokilok
Niveau 17
11 décembre 2013 à 17:24:32

Une lise de clef associé a des valeurs.

lokilok
lokilok
Niveau 17
11 décembre 2013 à 17:31:01

Liste*

Et sinon c'est inutile d'avoir deux conteneurs, un seul contenant une structure qui contient tout ce que tu veux c'est plus simple.

Et pour quand même être plus précis pour les map http://www.cplusplus.com/reference/map/map/

dezq
dezq
Niveau 7
11 décembre 2013 à 22:19:35

Bon j'ai compris comment fonctionne std::map mais je vois toujours pas trop l'avantage par rapport au vecteur ^^
Ou alors j'ai loupé quelque chose.

" un seul contenant une structure qui contient tout "

--> j'y avais pas pensé je crois que je vais faire ça merci ^^

lokilok
lokilok
Niveau 17
11 décembre 2013 à 22:24:14

Donc c'est que t'as mas compris comment ça marche.

dezq
dezq
Niveau 7
11 décembre 2013 à 22:36:50

Ah en faite si j'ai compris le truc :hap:

En faite avec std::map on peut faire carte[0] = qquechose et carte[50] = qquechose sans qu'il y ai forcement quelquechose en 50 et 0.

Du coup j'ai pas à faire des milliers de insert, si carte[i] = vide alors j'affiche une case vide, sinon le bloc .. etc.

dezq
dezq
Niveau 7
11 décembre 2013 à 22:40:40

ou non je dis des conneries en faite :(

lokilok
lokilok
Niveau 17
11 décembre 2013 à 22:46:25

Bah si c'est ça.

Dans un vecteur ce qu'il y a entre les crochet c'est la place de la valeur dans la liste, donc aucun trou possible, alors qu'une mal c'est juste une clef c'est absolument pas lié a la taille, donc tu mets le nombre (ou n'importe qu'elle autre variable, comme une structure qui contiendrait x y et z) que tu veux.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment