1

私は持っていvector<vector<int> > tchSubVecます。

この行を実行できない理由がわかりません: vector<int>& vec = tchSubVec[i];

.また、の最後に置くと、IDEからの提案はありませんtchSubVec[i]

完全なコードは次のとおりです。

 for(vector<vector<int> >::iterator i = tchSubVec.begin(); i < tchSubVec.end(); i++)
    {
        cout << "Subjects of teacher " << distance(tchSubVec.begin(), i) << " : \n";
        vector<int>& vec = tchSubVec[i];
        for(vector<int>::iterator j =  vec.begin(); j < vec->end(); j++)
        {
            cout << vec[i] << ", ";
        }
    }

コードの何が問題になっていますか?

4

4 に答える 4

1
vector<int>& vec = tchSubVec[i];

インデックスのアドレス指定と反復子という 2 つの概念を混同しています。それらは関連していますが、同じではなく、交換可能ではありません。

iこれはiterator、ポインターと同様の方法で使用されます。まるであなたがこれをやっているようです:

char** bufs = new char* [256];
for (size_t i = 0; i : 256; ++i)
  bufs[i] = new char [1024];

/// ... then ...

for (char** it = bufs; it < bufs+256; ++it)
  char* buf = bufs[it];
  //              ^^^^     

ここでitchar**であり、積分ではないことに注意してください。ポインターではなく、インデックス付けで積分を使用します。

実際にやりたいことは、イテレータを逆参照することです。

vector<int>& vec = *i;
于 2013-11-08T19:18:12.467 に答える