次のコマンドを実行すると、リストの最後のデータが失われ、前のデータが取得されます。カウンターを追加して1を引いてみるとクラッシュします。これについての助けがあれば幸いです。ポインタ演算でイテレータのend()関数が機能しない
template <typename T>
Iterator<T> Iterator<T>::operator--()
{
ptr = ptr->backward;
return *this;
}
template <typename T>
Iterator<T> DoublyLinkedList<T>::end() const
{
Iterator<T> iObj;
iObj.ptr = this->last;
iObj.capacity = this->count;
return iObj;
}
int main() {
DoublyLinkedList<int> *d = new DoublyLinkedList<int>;
for (int i = 2; i <= 20; i += 2) {
d->insertLast(i);
}
//Get an Iterator which points at the end of the list
Iterator<int> iter = d->end();
--iter;
//Test that it does point to the first
checkTest("testIteratorsDecrement #1", 20, *iter);
//Test that our Iterator can move forward;
--iter;
checkTest("testIteratorsDecrement #2", 18, *iter);
//move it some more
for (int i = 0; i < 7; i++) {
--iter;
}
checkTest("testIteratorsDecrement #3", 4, *iter);
--iter;
checkTest("testIteratorsDecrement #4", 2, *iter);
delete d;
return 0;
}
私は、次の手順を実行して、それを修正しようとするが、それはクラッシュします。 countは保護されたintです。
template <typename T>
Iterator<T> DoublyLinkedList<T>::end() const
{
Iterator<T> iObj;
iObj.ptr = this->last + (count -1);
iObj.capacity = this->count;
return iObj;
}
とすることをおすすめします。なぜ、最後の項目のアドレスにカウントを追加していますか? – Hal
あなたはそれが1つだと思いますか?通常、終わりを過ぎたものを表しています。おそらくこれはあなたが見ているものです。もっと重要な点は、ここで作業するための再現可能な例が必要です(コンパイルできるもの) – OMGtechy
私はもっとコードを追加しましたが、何とか間違ったリンクをリスト1に出力しました。最後に。 – HamHat