2010-12-01 17 views
0

私はこのコードベクトル要素にアクセスできませんか?

vector <int> a[100001]; 
a[1].push_back(1); 
if(a[1][0] == 1) 
     cout<<"OK!"; 

を持っている。しかし、私がアクセスしようとすると、1 [0]それは言う:

CXX0058: Error: overloaded operator not found 

全コード:ここで

#include<stdio.h> 
#include<vector> 
using namespace std; 
FILE *f=fopen("chei.in","r"); 
FILE *g=fopen("chei.out","w"); 
int t[100001],N,x,nr,k,d; 
vector <int> a[100001]; 
int main(){ 
    fscanf(f,"%d",&N); 
    for(int i=1;i<=N;++i) 
    { fscanf(f,"%d",&x); 
     for(k=0;k<a[i].size();++k){ 
       if(a[i][k]== x) 
        break;} 
     if(k==0 || (k==a[x].size() && a[i][k] == x)){ 
       t[i]=x; 
       a[x].push_back(i); 
     } 
    } 
for(int i=1;i<=N;i++){ 
     if(t[i]==i || t[i]==0) 
      nr++;} 
fprintf(g,"%d",nr); 
return 0; 
} 

は、時計のスクリーンショットです: alt text

+10

悪気はなく、あなたの答えを必要とするという事実は、高速懸念本当にありません米国。実際、そのようなことを述べると、人々はまったく答えないようになる可能性が高い。 – ereOn

+0

(GCCはこの罰金をコンパイルします) 'ベクトル&tmp(a [1]); if(tmp [0] == 1)... '作業しますか? – dennycrane

+0

私はオンラインコンテストに参加していて問題を抱えているので速く必要ですが、この問題に反対してきました...コンテストは1時間で終了します。それまでは。 – Cristy

答えて

1

コードに問題はないようです。ほぼすべての人がコンパイルエラーだと思っていましたが、ybungalobillは、演算子の結果を取得することはVisual Studioのデバッガではサポートされていないと指摘しました。

これは、あなたのプログラムがあなたが期待することをしても心配するものではありません。たとえデバッガがちょっと混乱していても、プログラムはベクトル要素にアクセスできます。

そうのような時計を設定してみてください、あなたのデバッガが値を報告できるようにするには:((a[1])._Myfirst)[0] このスレッドで推奨されているように:http://social.msdn.microsoft.com/forums/en-US/vsdebug/thread/c09f4fe4-4783-4dbb-8d36-85489fa2a4ae

+0

問題は、うまくいきません、それはリターン0まで届きます。 – Cristy

+0

((a [1])._ Myfirst)[0]はうまくいくようです。 – Cristy

+1

それは私のために終了します。確かに私は入力ファイルを持っていませんが、出力ファイルに0を出力して終了します。また、それを聞いてよかったので助けになりました。 – cgmb

0

g ++コンパイラで試してみたところ、コードは正常に動作します。

どのコンパイラを使用していますか?

+0

Visual Studio 2010に付属するもの。 – Cristy

+0

Visual Studio 2010は、このようなベクタ要素のアクセスを廃止するような新しい標準がない限り、このコードをサポートする必要があります。あなたのコードのどこかで "a"が宣言されていますか? –

0

正しく動作しない不条理なSTLポートを使用していますか?試してくださいa[1].at(0)

+0

a [1] .at(0)はCXX0039を返します。エラー:シンボルがあいまいです – Cristy

+0

フルコードを投稿できますか?無関係な部分はすべて整えられますが、コンパイルできますか? – EboMike

関連する問題