双链接列表模板中的几件事
Couple of Things In Doubly Linked List Template
我有一个双链表的代码,其中有几行代码的想法不清楚。我请求专家对下面的行发表评论。我上次使用C++已经很久了。我只指出了两条我不理解的线。
template <typename T>
class double_linked
{
struct node
{
T data;
node* prev;
node* next;
node(T t, node* p, node* n) : data(t), prev(p), next(n) {}
};
node* head;
node* tail;
public:
double_linked() : head( NULL ), tail ( NULL ) {}
template<int N>
double_linked( T (&arr) [N]) : head( NULL ), tail ( NULL )
{
for( int i(0); i != N; ++i)
push_back(arr[i]);
}
bool empty() const { return ( !head || !tail ); } // this doing?
operator bool() const { return !empty(); } // this doing? i know operators need in C++ but dont know the use of it here
void push_back(T);
void push_front(T);
T pop_back();
T pop_front();
~double_linked()
{
while(head)
{
node* temp(head);
head=head->next;
delete temp;
}
}
};
operator bool() const
是一个转换运算符。如果在需要布尔的上下文中使用double_linked
的实例,则将调用此函数进行转换。(在您的情况下,如果列表不为空,则将评估为true
。)
另一个函数是一个普通的旧函数,如果head
或tail
为空,它将返回true
。
有关转换运算符的更多信息,请参阅:转换运算符如何在C++中工作?
第一个函数用于确定列表是否为空。在双链接列表中,如果至少有一个元素,则head
和tail
指针(分别指向列表的开始和结束)必须指向有效元素。因此,您可以通过测试这两个指针是否都没有指向有效元素(即null
)来测试列表是否为空。这就是表达式!head || !tail
的作用——检查其中一个指针是否为null
,如果是,则列表为空。
operator bool()
是一个转换运算符。这基本上意味着,无论何时将列表强制转换为bool
,都会调用该函数,并将结果用作bool
的值。函数返回列表是否为空,因此如果列表不为空,则类似bool result = myList;
的表达式将使result
成为true
。
这是一个谓词,告诉我们它是否为空,它检查指针是否为0(null)。
bool empty() const { return ( !head || !tail ); } // this doing?
这允许用户将容器的实例化视为布尔值,如果它不为空,则为true。
operator bool() const { return !empty(); } // this
实现链表是一个很好的编程练习,但如果你想在实际代码中使用链表,那么你真的应该使用std::list(in)。
相关文章:
- 双击更改 mfc 中列表控件中的行的颜色
- 如何修复列表视图中的错误?,封装控件时无法选择任何项
- 当鼠标悬停在 MFC C++ 中列表控件的列标题上时,可视显示工具提示
- 如何在调整列表视图大小时将标题宽度设置为等于其列表视图控件宽度
- 在 MFC C++中悬停列表控件的列标题的可视化显示工具提示
- 如何在列表控件中创建右键单击菜单
- 编译几个源文件(主文件和头文件)并在ROOT CINT中链接它们
- 如何在列表控件中使用复选框
- 谷歌测试开发了几个测试套件
- C++ 具有水平滚动条的 MFC 列表控件
- 在自定义组合框下拉列表控件上等待超过5秒会导致win32 C++应用程序在Windows7中挂起
- 在 MFC 中特定行的列表控件上插入项
- 在对话框窗口中使用列表控件
- 将项目添加到列表控件时,UI被冻结
- 双链接列表模板中的几件事
- MFC应用程序在添加列表控件元素时卡住
- 如何在双击列表中插入编辑控件中的项目
- 如何在Visual c++中从窗口中获取控件列表
- 如何在Win32项目c++中添加几个项目到列表框
- 是否有在MFC对话框中定义的控件列表或控件容器