2016-05-22 10 views
0

私のコードは、container std :: set()を使用しています。今度は私がwhile(t)ループを実行するたびに、コンテナstd :: setにあるデータは消去されません。なぜこのようなことが起こっていますか。私のコンテナを再宣言しても、コンテナの値はどうなっていますか?保持される。C++で同じ名前のstd :: container()を再宣言すると、前のデータがフラッシュされますか?

#include <bits/stdc++.h> 
using namespace std; 

int main() 
{ 
    long long int t,i,k,n,m; 
    cin >> t; 
    set <int> s; 
    while(t--){ 
     cin >> n >>m; 
     for(i=0;i<n;i++){ 
      cin >> k; 
      s.insert(k); 
     } 
     for(i=0;i<m;i++){ 
      cin >> k; 
      if(s.count(k)==1){ 
       cout << "YES" << endl; 
      } 
      if(s.count(k)==0){ 
       cout << "NO" << endl; 
       s.insert(k); 
      } 
     } 
     //s.clear();    
    } 
    return 0; 
} 
+5

正確にあなたはセットを再宣言しますか? –

+0

@VarunGarg - あなたの編集をロールバックしたことに注意してください。あなたの編集はあなたの特定の問題を解決してくれました。答えは冗長で、将来の読者は混乱します。私たちはあなたの問題をソートしました:-) –

+0

ありがとうございました。 –

答えて

1

あなたはstd::setを再宣言していません。あなたはwhileループの外であなたのセットを宣言しています。つまり、sが有効範囲外になるまで(つまり、main()の末尾に到達するまで)、セットの内容は保持されます。

あなたが設定をリセットするための2つのオプションがあります。whileループ

int main() 
{ 
    long long int t,i,k,n,m; 
    cin >> t; 
    // <-- move declaration of 's' from here. 
    while(t--){ 
     set <int> s; // <-- to here. 
     cin >> n >>m; 
     ... 

#2のコメントを外しs.clear()s

#1の移動の宣言をして、反復

間の設定をクリア

s.clear()を単にコメント解除してください!

while(t--){ 
    cin >> n >>m; 
    for(i=0;i<n;i++){ 
     cin >> k; 
     s.insert(k); 
    } 
    for(i=0;i<m;i++){ 
     cin >> k; 
     if(s.count(k)==1){ 
      cout << "YES" << endl; 
     } 
     if(s.count(k)==0){ 
      cout << "NO" << endl; 
      s.insert(k); 
     } 
    } 
    s.clear();   // <-- Uncomment this! 
} 
+0

ありがとうございました。しかし、ループ中に入れました。コンテナの挙動はどうなっていますか?私はまだ同様の問題に直面しています。 –

+0

問題が解決しました。あなたの答えをありがとう –

関連する問題