0

私は次の方法を持っています:

void* vpArr_t::operator[](int i) const
{
    if (!isEmpty() && i >= 0 && i < nOfItems)
    {
        list<void*>::iterator it;
        int idx;
        for(it = array.begin(), idx = 0; idx < i; ++it, ++idx); // go to the i'th element 
        return *it;
    }
    else
    {
        return NULL;
    }
}

どこ:

arrayリスト型です。

次の行に赤い下線 (コンパイル エラー) が表示されます。

for(it = array.begin(), idx = 0; idx < i; ++it, ++idx);

で:

it = array.begin()

list<void*>::const_iteratora を型に設定しようとしていると書かれていlist<void*>::iteratorます。

iteratorしかし、メソッドのオーバーロードがあることに気付きましたbegin()。このエラーを解決するには?Visual C++ 2012 を使用しています。

4

4 に答える 4

0

iteratorを使用できないが使用しなければならないという事実とは別に、const_iterator役立つ機能があります。

list<void*>::const_iterator it = arary.begin();
std::advance(it, i);

とはいえ、双方向リストを配列と呼ぶのは疑問です。また、これは実際には効率的ではありません。vector<>orを使用するdeque<>と、i 番目の要素に一定時間アクセスできます。また、size_tC++ 標準ライブラリの残りの部分とより一貫性のあるインデックスにも使用します。

于 2013-05-23T12:47:22.560 に答える