加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – FIFO实现

发布时间:2020-12-16 09:28:22 所属栏目:百科 来源:网络整理
导读:在实现FIFO时,我使用了以下结构: struct Node{ T info_; Node* link_; Node(T info,Node* link=0): info_(info),link_(link) {}}; 我认为这是许多STL容器(例如List)的众所周知的技巧.这是一个好习惯吗?当你说Node有一个带有类型指针的成员时,它对编译器意
在实现FIFO时,我使用了以下结构:

struct Node
{
    T info_;
    Node* link_;
    Node(T info,Node* link=0): info_(info),link_(link)
    {}
};

我认为这是许多STL容器(例如List)的众所周知的技巧.这是一个好习惯吗?当你说Node有一个带有类型指针的成员时,它对编译器意味着什么?这是一种无限循环吗?

最后,如果这是一个不好的做法,我如何能够实现更好的FIFO.

编辑:人们,这完全是关于实施.我对STL库非常熟悉,并且知道来自多个库的大量容器.我想与能够提供良好实施或良好建议的人讨论.

解决方法

指向被声明类型的对象的指针在C和C中都很好.这是基于指针是固定大小的对象(例如,在32位平台上始终是32位整数)的事实,因此您不需要知道指向类型的完整大小.

实际上,您甚至不需要完整的类型声明来声明指针.前瞻性声明就足够了:

class A; // forward declared type

struct B
{
    A* pa; //< pointer to A - perfectly legal
};

当然,在实际访问成员时,您需要在范围内进行完整声明:

#include <A.hpp> // bring in full declaration of class A
...
B b;
b.pa = &a; // address of some instance of A
...
b.pa->func(); // invoke A's member function - this needs full declaration

对于FIFO,请查看std :: queue. std :: list,std :: deque和std :: vector都可以用于此目的,但也提供其他功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读