template<typename T>
class List{
public:
List();
List(List<T> &L,int lo,int hi);//拷贝构造函数
~List();//析构函数
//对外接口
int Size();
bool IsEmpty();
T& operator[](int r)const;//对[]的重载
TYLIST(T) First();//返回首节点
TYLIST(T) Last();//返回最后一个节点
bool IsDisordered();//是否有序
//插入
void Assign(T const p,int n);//把p中的n个元素复制到list中
TYLIST(T) Insertpre(TYLIST(T) p, T const&el);//在p 节点之前插入元素
TYLIST(T) Insertaft(TYLIST(T) p, T const&el);//在p节点之后插入元素el
//查找
TYLIST(T) Find(T const&el);//查找某个元素 -- 无序
TYLIST(T) Find(T const&el, int lo, int hi);//某个区间查找 --无序
TYLIST(T) Search(T const&el);//有序情况下查找el,并返回一个合适的位置能够插入el
//删除
bool Remove(TYLIST(T) p);//删除某个节点,成功返回true
//排序
void Sort();
//去重
int Deduplicate();//无序
int Uniquify();//有序
void Reverse();//倒序
//遍历
void Traverse(void()(T &el));//函数指针
template<typename TP>
void Traverse(TP &);//函数对象
private:
int size;
TYLIST(T) head, *tail;//内部变量加以下划线开始,私有不能被继承,只能类和类的友元函数使用
protected:
void _Init();//初始化,类,子类,友元
void _Clear();//清空所有节点
};
template<typename T>
TYLIST(T) List<T>::First()
{
return _head_->next;
}
template<typename T>
List<T>::List(List<T> &L, int lo, int hi)
{
//static List<T> LL = L;//此时定义的static 局部对象,在析构是会出问题,会析构两次
_size_ = L.Size();
_head_ = new ListNode<T>;
_tail_ = new ListNode<T>;
_head_->pre = NULL;
TYLIST(T) temhead = _head_;
TYLIST(T) temp = L.First();
int tem = _size_;
while (tem--&&temp!=NULL)
{
TYLIST(T) p = new ListNode<T>;
p->next = NULL;
p->info = temp->info;
p->pre = temhead;
temhead->next = p;
temhead = p;
temp = temp->next;
}
_tail_->next = NULL;
_tail_->pre = temhead;
temhead->next = _tail_;
}
上面是代码的一部分,问题是:在拷贝构造函数中如果我的形参是List<T> &这个时候没错,若果是List<T>const&的时候会报错:
Error 3 error C2662: 'ListNode<T> *List<T>::First(void)' : cannot convert 'this' pointer from 'const List<int>' to 'List<int> &'
Error 2 error C2662: 'int List<int>::Size(void)' : cannot convert 'this' pointer from 'const List<int>' to 'List<int> &'
但是如果是const&,我在程序中没有修改对象的成员和成员函数,const只作为右值应该是可以的啊或者是我的理解完全有问题?求教高手!!
如果使用List<T>const&或constList<T>&,那么参数L只能调用const修饰的成员函数,不能调用非const修饰的成员函数,改成: intsize()const; TYLIST(T)First()const; 就可以了
List<T>const&你想表达的是 const List<T>&吧, &默认应该是和类型放在一起表示引用吧如果使用List<T>const&或constList<T>&,那么参数L只能调用const修饰的成员函数,不能调用非const修饰的成员函数,改成: intsize()const; TYLIST(T)First()const; 就可以了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。