IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

vector<vector<vector<int>>> Debug assertion failed.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut vector<vector<vector<int>>> Debug assertion failed.
    Bonjour,
    J'ai une grille 3dimension et j'aimerai supprimer tous les éléments de la 3 eme dimension sauf les deux premier ( c'est pour ca que j'ai utilisé ca : begin()+1 ) , la portion du code qui me pose probleme est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(grille[5][4].size()>2){
    grille[5][4].erase(grille[5][4].begin()+1,grille[5][4].end());
    }
    le problème c'est que quand j’exécute ce code y'a l'erreur suivante : Debug assertion failed.
    Je ne vois pas ce que je pourrais faire pour que ce code fonctionne, puisque il parait qu'il est juste . pourriez vous m'aider s'il vous plait ?

    Merci d'avance.
    Cordialement.

  2. #2
    Membre Expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Par défaut
    ton code supprime tout le vector sauf le premier élément, il faut mettre begin + 2 si tu veux conserver les deux premiers...

  3. #3
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grille[5][4].resize(2);

  4. #4
    Membre habitué
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grille[5][4].resize(2);
    avec resize ça marche bien mais es que vraiment c'est la méthode approprié pour supprimer les cases d'un vecteur,(elle libère la mémoire des cases supprimé)

  5. #5
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Citation Envoyé par piet1 Voir le message
    avec resize ça marche bien mais es que vraiment c'est la méthode approprié pour supprimer les cases d'un vecteur,(elle libère la mémoire des cases supprimé)
    Non, la capacité du vecteur peut rester la même. En C++11 tu peux utiliser shrink_to_fit. Pre C++11, il faut créer un nouveau vecteur de la taille voulue et copier les éléments un à un.

    Voici un petit programme qui illustre shrink_to_fit :
    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
    // g++ -Wall -Wextra -std=c++11 -pedantic -O3 resize.cpp -o resize && ./resize
     
    #include <iostream>
    #include <vector>
     
    int main()
    {
    	// Création du vecteur
    	std::vector<int> v(2222);
    	{
    		int i = 1000;
    		for (auto & e : v) { e = i++; }
    	}
     
    	// Affichage des caractéristique du vecteur avant et après resize, puis shrink_to_fit
    	for (unsigned int i = 0; i < 3; ++i)
    	{
    		if (i == 1)
    		{
    			std::cout << "resize" << std::endl;
    			v.resize(1111);
    		}
    		if (i == 2)
    		{
    			std::cout << "shrink_to_fit" << std::endl;
    			v.shrink_to_fit();
    		}
     
    		std::cout << "Valeurs du vecteur de taille " << v.size() << " entre " << v.front() << " et " << v.back() << ". " << "(Capacité = " << v.capacity() << ")" << std::endl;
    		std::cout << std::endl;
    	}
     
    	return 0;
    }
    Et son résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Valeurs du vecteur de taille 2222 entre 1000 et 3221. (Capacité = 2222)
     
    resize
    Valeurs du vecteur de taille 1111 entre 1000 et 2110. (Capacité = 2222)
     
    shrink_to_fit
    Valeurs du vecteur de taille 1111 entre 1000 et 2110. (Capacité = 1111)

  6. #6
    Membre Expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Par défaut
    resize(2) met logiquement la taille du vector à 2. Que la mémoire soit libérée ou pas regarde l'implémentation du vector (en général non il me semble étant donné qu'il présume que tu vas t'en resservir derrière).

  7. #7
    Membre habitué
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/07/2007, 19h09
  2. [Vector] Utilisation d'un Vector
    Par LP-mpascolo dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 04/06/2007, 16h50
  3. Réponses: 3
    Dernier message: 04/12/2006, 13h01
  4. [Debutant][Vector]Petit problème de vector
    Par GyZmoO dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 25/05/2006, 10h39
  5. [Vector] Ajouter un Vector dans un autre Vector
    Par VinceFromBcn dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 30/06/2004, 21h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo