2017-08-18 3 views
-4

ne sait pas où est mon problème. J'ai essayé de compiler le code une fois et cela a fonctionné. Cependant, je l'ai copié dans un nouveau projet afin de le modifier, juste la couleur ou le temps d'attente, et ça marche dans le premier programme. Qu'est-ce qui ne va pas? Je me sens vraiment frustré. Avec ce code je veux représenter graphiquement la fonction sinus. Voici mon code:Je fais un code C++ et une erreur se produit Je ne sais pas pourquoi

#include <bits/stdc++.h> 

using namespace std; 
int main() 
{ 
    int t,n1,n2,res=0; 
    cin>>t; 
    vector<int> v1; 
    vector<int> v2; 
    while (t--) { 
     cin>>n1>>n2; 
     v1.push_back(n1); 
     v2.push_back(n2); 
    } 
    for (int i=v1.size();i>0;i++) { 
     bool state=binary_search(v2.begin(),v2.end(),v1[i-1]); 
     if (state){ 
      v1.pop_back(); 
      res++; 
     } 
    } 
    cout<<res<<endl; 
    return 0; 
} 

error of the console

+0

'#include ' Ne faites pas ça! – user0042

+0

Jetez un coup d'œil à votre boucle 'for'. Est-ce que ça évalue jamais à faux? – Mekicha

+1

Sûr de ces conditions dans votre boucle for? 'pour (int i = v1.size(); i> 0; i ++) {' – user0042

Répondre

5

changement

for (int i=v1.size();i>0;i++) 

Pour

for (int i=v1.size();i>0;i--) 

Sinon, vous accéderiez derrière les limites ->UB.

Ou même à un autre segment en mémoire ->SIGSEGV.


également std::binary_search dit:

"... Une gamme entièrement triés répond à ces critères."

Alors avant d'appeler binary-search que vous devez faire

std::sort (v2.begin(), v2.end()); 
1

Il y a une faute de frappe dans l'instruction

for (int i=v1.size();i>0;i++) { 
         ^^^ 

Il est évident que vous voulez dire à la place

for (int i=v1.size();i>0;i--) { 
         ^^^ 

Il est mieux écrire l'instruction for comme

for (auto i = v1.size(); i != 0; i--) { 
     ^^^^ 

Cependant dans tous les cas, le programme est erroné.

Tout d'abord, avant d'utiliser la méthode std::binary_search, vous devez trier le vecteur v2.

Le deuxième problème est que cet appel

v1.pop_back(); 

ne supprime pas l'élément nécessaire du vecteur v1 qui se trouve dans le vecteur v2. Il peut simplement supprimer le dernier élément du vecteur v1 qui n'est même pas présent dans le vecteur v2.