2017-08-18 7 views
-4

私の問題がどこにないか分かりません。私はコードを一度コンパイルしようとしました。しかし、それを修正するために新しいプロジェクトにコピーしました。色や時間を待つだけで、最初のプログラムで動作します。なにが問題ですか?私は本当に不満を感じる。このコードでは、サイン関数をグラフィックにしたいと思います。ここに私のコードは次のとおりです。私はC++コードを作成していますが、なぜエラーが発生しますか?

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

#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 'しないでください! – user0042

+0

'for'ループを見てください。それは偽に評価されますか? – Mekicha

+1

forループのこれらの条件についてはどうすればよいですか? 'for(int i = v1.size(); i> 0; i ++){' – user0042

答えて

5

変更

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

そうでなければ、あなたが境界の後ろにアクセスすることになり - >UB

またはさらにメモリ内の別のセグメント - >SIGSEGV


またstd::binary_searchは言う:

"... 完全にソート範囲は、これらの基準を満たしています。"

のでbinary-searchを呼び出す前に、あなたは

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

をしなければならない声明

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

のためにあなたの代わりに

for (int i=v1.size();i>0;i--) { 
         ^^^ 
を意味することは明らかであるにタイプミスがあります

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

のようなforステートメントを書く方が良いです。いずれにしても、プログラムは間違っています。

まず、方法std::binary_searchを使用する前に、ベクトルv2をソートする必要があります。

第二の問題は、このコール

v1.pop_back(); 

ベクトルv2に見出されるベクターv1の要素を必要除去しないことです。ベクトルv2にも存在しないベクトルv1の最後の要素を削除できます。

関連する問題