gpt4 book ai didi

c++ - 带有 LinkedList 的迭代器类?

转载 作者:行者123 更新时间:2023-11-30 03:34:26 26 4
gpt4 key购买 nike

我仍然是 C++ 的新手,我觉得这一定是我遗漏的非常明显的错误。

#include <iostream>
#include "List.h"

int main()
{
List<int> mylist;
List<int>::iterator it1, it2;

这一行

List<int>::iterator it1, it2;

给出消息“List has no member iterator”

这是列表类

template <typename Object>
class List
{
private:
// The basic doubly linked List node.
// Nested inside of List, can be public
// because the Node is itself private
class Node
{
Object _data;
Node *_prev;
Node *_next;

Node(const Object & d = Object(), Node * p = NULL, Node * n = NULL)
: _data(d), _prev(p), _next(n) { }
};

public:




public:
List()
{
init();
}

~List()
{
clear();
delete _head;
delete _tail;
}

List(const List & rhs)
{
init();
*this = rhs;
}

const List & operator= (const List & rhs)
{
if (this == &rhs)
return *this;
clear();
for (const_iterator itr = rhs.begin(); itr != rhs.end(); ++itr)
push_back(*itr);
return *this;
}

// Return iterator representing beginning of List.
// Mutator version is first, then accessor version.
iterator begin()
{
return iterator(_head->_next);
}

const_iterator begin() const
{
return const_iterator(_head->_next);
}

// Return iterator representing endmarker of List.
// Mutator version is first, then accessor version.
iterator end()
{
return iterator(_tail);
}

const_iterator end() const
{
return const_iterator(_tail);
}

// Return number of elements currently in the List.
int size() const
{
return _size;
}

// Return true if the List is empty, false otherwise.
bool empty() const
{
return size() == 0;
}

void clear()
{
while (!empty())
pop_front();
}

// front, back, push_front, push_back, pop_front, and pop_back
// are the basic double-ended queue operations.
Object & front()
{
return *begin();
}

const Object & front() const
{
return *begin();
}

Object & back()
{
return *--end();
}

const Object & back() const
{
return *--end();
}

void push_front(const Object & x)
{
insert(begin(), x);
}

void push_back(const Object & x)
{
insert(end(), x);
}

void pop_front()
{
erase(begin());
}

void pop_back()
{
erase(--end());
}

// Insert x before itr.
iterator insert(iterator itr, const Object & x)
{
Node *p = itr.current;
_size++;
return iterator(p->_prev = p->_prev->_next = new Node(x, p->_prev, p));
}

// Erase item at itr.
iterator erase(iterator itr)
{
Node *p = itr.current;
iterator retVal(p->_next);
p->_prev->_next = p->_next;
p->_next->_prev = p->_prev;
delete p;
_size--;

return retVal;
}

iterator erase(iterator start, iterator end)
{
for (iterator itr = start; itr != end; )
itr = erase(itr);

return end;
}

private:
int _size;
Node *_head;
Node *_tail;

void init()
{
_size = 0;
_head = new Node;
_tail = new Node;
_head->_next = _tail;
_tail->_prev = _head;
}
};

我假设这个错误可能是因为没有 Iterator 类?

最佳答案

I am assuming that this error is probably for not having an Iterator class?

是的,您的代码假定 List<T>还提供嵌套的 List<T>::iterator类。

这就是您的代码中缺少的内容。

关于c++ - 带有 LinkedList 的迭代器类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42009052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com