复制构造函数:
// Copy constructor. Copies another list.
CRevList(const CRevList &b)
{
cout << "Copy" << endl;
const Node *Start = b.Begin();
const Node *End = b.End();
cout << "Start; " << Start << endl;
cout << "End; " << End << endl;
cout << "b.Begin() : " << b.Begin() << endl;
cout << "b.End() : " << b.End() << endl;
T temp_data;
for(;;){
cout << "Start->data() loop: " << Start->Data() << endl;
temp_data = Start->Data();
PushBack(temp_data);
if(Start == End)
break;
Start = Start->m_next;
}
}
调用 End 以获取指向尾节点的指针(Begin() 相同):
const Node *End() const {}
Node *End() {
cout << "m_tail " << m_tail << endl;
return m_tail;
}
对不起代码量。我只是不知道我哪里错了
编辑:好的,这是一个最小的完整示例
司机
using namespace std;
#include <iostream>
#include "RevList.h"
int main(){
CRevList<int> List;
List.PushBack(7);
List.PushBack(300);
cout << "End Ref: " << List.End() << endl;
cout << "begin ref: " << List.Begin() << endl;
cout << List.End() << endl;
CRevList<int> New_list(List);
cout << "End Ref: " << New_list.End() << endl;
cout << "begin ref: " << New_list.Begin() << endl;
}
双链表的实现:
template<class T> class CRevList
{
public:
//constructor stuff doesn't matter... ;
class Node
{
public:
friend class CRevList;
Node() {m_next = 0; m_prev = 0;}
Node(const T &t) {m_payload = t; m_next = 0; m_prev = 0;}
T Data() {return m_payload;}
const T Data() const {return m_payload;}
private:
Node *m_next;
Node *m_prev;
T m_payload;
};
//Push Back ////////////////////////////////////////////////
void PushBack(const T &t) {
Node * Temp = new Node(t);
if(IsEmpty()){
cout << "is Empty" << endl;
m_head = Temp;
m_tail = Temp;
}
else{
Node * Curr = m_tail;
Curr->m_next = Temp;
Temp->m_prev = Curr;
m_tail = Temp;
}
size += 1;
}
//Get a pointer to the first node in the list
const Node *Begin() const {}
Node *Begin() {
cout << "m_head " << m_head << endl;
return m_head;
}
//get a pointer to the last node in the list
const Node *End() const {}
Node *End() {
cout << "m_tail " << m_tail << endl;
return m_tail;
}
private:
Node *m_head, *m_tail; // Head node
unsigned size;
};
};
并最终从驱动程序输出
m_tail 0x2068030
End Ref: 0x2068030
m_head 0x2068010
begin ref: 0x2068010
m_tail 0x2068030
0x2068030
Copy
Start; 0x7fff7745d240
End; 0x7fff7745d240
b.Begin() : 0x7fff7745d240
b.End() : 0x7fff7745d240
Start->data() loop: 2
Segmentation fault //don't care about this right now