Il me dit: vector subscript out of range!!!

Résolu
cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 - 14 janv. 2010 à 01:57
cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 - 15 janv. 2010 à 00:30
mon code plante (debug assertion failed)
bon c'est ma méthode (generer_tout_ligne): le problème vient du code en rouge:

***********************************************************************
void generer_tout_ligne() {
srand(int(time(0)));
for (int ii = 2; ii < 15; ii++) {
int nombre = 0;
verif.clear();
for (int g = 0; g < 14; g++) {
verif.push_back(g + 1);
}
for (unsigned int g = 0; g < verif.size(); g++) {
if (verif[g] == ii)
verif.erase(verif.begin() + g);
}
verif2.clear();
for (unsigned int g = 0; g < verif.size(); g++) {
verif2.push_back(verif[g]);
}
for (int i = 1; i < 14; i++) {
if (calendrier[i][ii] == 0) {
for (int g = 1; g < 15; g++) {
for (unsigned int a = 0; a < verif2.size(); a++) {
if (verif2[a] == calendrier[i][g])
verif2.erase(verif2.begin() + a);
}
}
nombre = (int) (0 + ((float) rand() / RAND_MAX * (verif2.size() - 1)));

calendrier[i][ii] = verif2[nombre];
int b = verif2[nombre];
for (unsigned int g = 0; g < verif.size(); g++) {
if (verif[g] == b)
verif.erase(verif.begin() + g);
}
}
}
int remplir;
for (int i = 1; i < 14; i++) {
remplir = calendrier[i][ii];
if (calendrier[i][remplir] == 0)
calendrier[i][remplir] = ii;
}
}
}
***********************************************************************

SVP aidez moi c'est pour mon mini-projet; SVP

30 réponses

cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 1
14 janv. 2010 à 23:28
est ce que je peux faire ceci?

for (iter it = verif2.begin(); it != verif2.end(); ++it) {
                            if (verif2[it] == calendrier[i][g])
                                it = verif2.erase(it);
}


plus précisément: est ce que je dois écrire:

verif2[it] == calendrier[i][g]


OU:

verif2(it) == calendrier[i][g]
0
cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 1
14 janv. 2010 à 23:31
est ce que je peux faire ceci?

for (iter it = verif2.begin(); it != verif2.end(); ++it) {
                            if (verif2[it] == calendrier[i][g])
                                it = verif2.erase(it);
}


plus précisément: est ce que je dois écrire:

Code C/C++ :
verif2[it] == calendrier[i][g]


OU:

Code C/C++ :
verif2(it) == calendrier[i][g]

Car les deux ne fonctionnent pas
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 janv. 2010 à 23:35
it n'est pas un entier, mais une classe ! De type itérateur.
Donc tu ne peux pas l'utiliser comme indice.

Il te faut utiliser:
  for (iter it = verif2.begin(); it != verif2.end();)
    if (*it == calendrier[i][g])
      it = verif2.erase(it);
    else
      ++it;


Regarde un peu les exemples que je t'ai donné, tout est marqué dedans.
_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 1
14 janv. 2010 à 23:50
Mon ami, j'espère que te fais pas des ennuis :( mais j'ai besoin de ton aide...

j'ai fait comme tu m'as dis, mais il me genère une erreur lors du debogage (une autre fois, vector subscribe out of range) :((((

voila la methode: (ou est le probleme?)


void generer_tout_ligne() {
        srand(int(time(0)));

        for (int ii = 2; ii < 15; ii++) {
            int nombre = 0;
            verif.clear();
            for (int g = 0; g < 14; g++) {
                verif.push_back(g + 1);
            }
for (iter it = verif.begin(); it != verif.end();){
if (*it == ii)
  it = verif.erase(it);
else
  ++it;
}
            verif2.clear();
            for (unsigned int g = 0; g < verif.size(); g++) {
                verif2.push_back(verif[g]);
            }

            for (int i = 1; i < 14; i++) {

                if (calendrier[i][ii] == 0) {
                    for (int g = 1; g < 15; g++) {
for (iter it = verif2.begin(); it != verif2.end();){
if (*it == calendrier[i][g])
  it = verif2.erase(it);
else
  ++it;
}
                    }
                    nombre = (int) (0 + ((float) rand() / RAND_MAX * (verif2.size() - 1)));

                    calendrier[i][ii] = verif2[nombre];
for (iter it = verif.begin(); it != verif.end();){
if (*it == verif2[nombre])
  it = verif.erase(it);
else
  ++it;
}
                    
                }
}
            int remplir;
                for (int i = 1; i < 14; i++) {
                    remplir = calendrier[i][ii];
                    if (calendrier[i][remplir] == 0)
                        calendrier[i][remplir] = ii;
                }
        }
    }
0

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

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 janv. 2010 à 23:54
Je ne peux pas voir ce qui ne vas pas. Il manque trop de chose, impossible pour moi de le debugger. Tu utilises des variables globales, ce qu'il ne faut jamais faire !

Poste tout ton code.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 1
14 janv. 2010 à 23:58
ok :)))) merci biennnnnnnn

voila le fichier "Competition.h"

#include
#include<vector>
#include<string>
#include<vector>
#include<stdlib.h>
#include <time.h>
using namespace std;
class Competition{
private:
int nomComp;
int calendrier[14][15];
vectorverif;
vectorverif2;
typedef std::vector::iterator iter;
public:
Competition(int a):nomComp(a){};

void generer_bord(){
for(int i=0; i<14; i++){
calendrier[i][0]=i;}
for(int i=0; i<15; i++){
calendrier[0][i]=i;}
}

void intialiser_calendrier(){
for(int i=0; i<14; i++){
for(int j=0; j<15; j++){
calendrier[i][j]=0;
}
}
}

void generer_1ligne(){
srand(int(time(0)));
int nombre=1;
verif.clear();
verif.push_back(nombre);

for(int i=1; i<14; i++){
while(existe(nombre)!=(-1)){

nombre = (int) (1 + ((float) rand() / RAND_MAX * (14 - 1 + 1)));
}
verif.push_back(nombre);
calendrier[i][1]=nombre;
}

//*******************************************************

int remplir;
for(int i=1; i<14; i++){
remplir=calendrier[i][1];
if(calendrier[i][remplir]==0)
calendrier[i][remplir]=1;
}
}

    void generer_tout_ligne() {
        srand(int(time(0)));

        for (int ii = 2; ii < 15; ii++) {
            int nombre = 0;
            verif.clear();
            for (int g = 0; g < 14; g++) {
                verif.push_back(g + 1);
            }
for (iter it = verif.begin(); it != verif.end();){
if (*it == ii)
  it = verif.erase(it);
else
  ++it;
}
            verif2.clear();
            for (unsigned int g = 0; g < verif.size(); g++) {
                verif2.push_back(verif[g]);
            }

            for (int i = 1; i < 14; i++) {

                if (calendrier[i][ii] == 0) {
                    for (int g = 1; g < 15; g++) {
for (iter it = verif2.begin(); it != verif2.end();){
if (*it == calendrier[i][g])
  it = verif2.erase(it);
else
  ++it;
}
                    }
                    nombre = (int) (0 + ((float) rand() / RAND_MAX * (verif2.size() - 1)));

                    calendrier[i][ii] = verif2[nombre];
for (iter it = verif.begin(); it != verif.end();){
if (*it == verif2[nombre])
  it = verif.erase(it);
else
  ++it;
}
                    
                }



                //********************************************************

                
            }
            int remplir;
                for (int i = 1; i < 14; i++) {
                    remplir = calendrier[i][ii];
                    if (calendrier[i][remplir] == 0)
                        calendrier[i][remplir] = ii;
                }
        }
    }


int existe(int n){
for(unsigned int i=0;i<verif.size();i++){
if(verif[i]==n)
return i;
}
return(-1);
}

int existeVer(int l, int m, int n){
for(int i=1; i<n-1; i++){
if(calendrier[m][i]==l)
return i;
}
return(-1);
}

void affiche_calendrier(){
for(int i=0; i<15; i++){
cout<<""<<endl;
for(int j=0; j<14; j++){
if(calendrier[j][i]<10)
cout<<"|  "<<calendrier[j][i]<<" |";
else
cout<<"| "<<calendrier[j][i]<<" |";
}
}
}
};


et cela c'est le "main.cpp"

#include "Competition.h"

void main()
{
Competition c(1);
c.intialiser_calendrier();
c.generer_bord();
c.generer_1ligne();
c.generer_tout_ligne();
c.affiche_calendrier();


system("pause");
}
0
cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 1
15 janv. 2010 à 00:00
NB: Négliges toutes les méthodes sauf "generer_tout_ligne"

Elles s'exécutent très bien
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
15 janv. 2010 à 00:08
Je vais regarder en détails.
En attendant, quelques remarques:
- int main et pas void main
- Utilise cstdlib et ctime, pas de .h
- JAMAIS de using namespace, surtout dans un header !!!
Un peu de lecture pour te faire patienter:
http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 1
15 janv. 2010 à 00:13
ok
0
cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 1
15 janv. 2010 à 00:30
oui oui je vois :))
c'est ça le problème dès le début... j'ai fais une bêtise, je suis désolé.
Mais ça n'empêche que tu m'as aidé trop pour comprendre plein de chose ;)
T'es un vrai trsor mon ami, merci de partager tes connaissance avec moi.

merci infiniment :)))))))))))))
0
Rejoignez-nous