#include <iostream> using namespace std; template <typename T> class LinkedList { template <typename U> friend ostream& operator << (ostream& out, const LinkedList<U> ll); struct Node { T data; Node* next; Node(T data = T()) : data(data), next(nullptr) {} } *head = new Node(); public: LinkedList() {} void append(T data) { Node* ptr = head; while (ptr -> next != nullptr) ptr = ptr -> next; ptr -> next = new Node(data); return; } T& operator [] (int index) { Node* ptr = head -> next; int length = 0; while (length != index) { ptr = ptr -> next; length ++; } return ptr -> data; } int size() { Node* ptr = head; int length = 0; while (ptr -> next != nullptr) { ptr = ptr -> next; length ++; } return length; } }; template <class T> ostream& operator << (ostream& out, const LinkedList<T> ll) { out << "[ "; for (int _ = 0; _ < ll.size(); _ ++) { cout << ll[_] << ' '; } cout << ']'; return out; } int main() { LinkedList<int> l = LinkedList<int>(); l.append(10); l.append(100); l.append(1000); cout << l << endl; return 0; }
时间: 2024-02-14 21:20:59 浏览: 132
使用include <iostream>时一定要加using namespace std
这段代码定义了一个模板类LinkedList,用于实现一个链表数据结构。这个链表中每个节点包含一个数据元素和一个指向下一个节点的指针。这个类定义了若干个成员函数,包括:
- append:在链表末尾添加一个新的节点,其数据元素为参数data;
- operator[]:重载运算符[],用于访问链表中指定位置的节点的数据元素;
- size:返回当前链表中节点的数量。
此外,这个类还定义了一个友元函数operator<<,用于将整个链表输出到输出流中。这个函数使用了链表的operator[]运算符和size函数,依次输出链表中每个节点的数据元素,并以方括号括起来,中间使用一个空格隔开。
在main函数中,创建了一个int类型的链表l,并向其中添加了三个元素。随后,使用cout输出这个链表,调用了operator<<函数,将整个链表输出到控制台中。输出结果为"[ 10 100 1000 ]"。
阅读全文