在队列中实现推送功能

随机球

我不确定自己在哪里出了问题,但我不断得到Push的怪异值。我不知道我的错误是在Push本身还是在Display中,但我认为是在Push中。请注意,此处的“推入”应该类似于“ std :: deque :: push_back”。

这是相关的实现代码:

fsu::Queue <char> q;
q.Push('a');
q.Display(std::cout, '\0');

这是我得到的:

0x100100a20
0x100100a20
0x0

相关定义:

void      Push    (const T& t); // push t onto queue
void      Display (std::ostream& os, char ofc = '\0') const; // output contents
                                    //through os
queue             ();              // default constructor
Queue             (const Queue&);  // copy constructor
~Queue            ();              // destructor
Queue& operator = (const Queue&);  // assignment operator

private:
    class Link
    {
        Link ( const T& t );  // 1-parameter constructor
        T      element_;
        Link * nextLink_;
        friend class Queue<T>;
    };
Link * firstLink_;
Link * lastLink_;

void         Copy   (const Queue<T>& q);
static Link* NewLink(const T& t);

这是实现所必需的:

template < typename T >
fsu::Queue<T>::Queue () : firstLink_(0), lastLink_(0)              // default constructor
{
  //empty
}

template < typename T >
fsu::Queue<T>::Queue (const Queue& q) : firstLink_(0), lastLink_(0)
{
  Copy(q);
}

template < typename T >
fsu::Queue<T>& fsu::Queue<T>::operator = (const Queue& q) // assignment operator
{
  if (this != &q)
  {
    Clear();
    Copy(q);
  }
  return *this;
}

template < typename T >
fsu::Queue<T>::Link::Link ( const T& t ) : element_(t), nextLink_(0)  // 1-parameter     constructor
{
};

template < typename T >
typename fsu::Queue<T>::Link* fsu::Queue<T>::NewLink (const T& t)
{
  Link * newLink = new(std::nothrow) Link (t);
  if (0 == newLink)
  {
    // exception handler
    std::cerr << "** Queue error: memory allocation failure\n";
    return 0;
  }
  return newLink;
}

template < typename T >
void fsu::Queue<T>::Copy (const Queue<T>& q)
{
  if (firstLink_ != 0)
  {
    std::cerr << "** Error: Queue::Copy called by non-empty object\n";
    //  exit(EXIT_FAILURE);
  }
  if (q.firstLink_ == 0)
    return;
  Link* qlink = q.firstLink_;
  while (qlink != 0)
  {
    Push(qlink -> element_);
    qlink = qlink -> nextLink_;
  }
  }

template < typename T >
void fsu::Queue<T>::Push (const T& t) // push t onto queue
{
if (Empty())
{
    Link * newLink = new Link(t);
    newLink -> nextLink_ = NULL;
    firstLink_ = newLink;
    lastLink_ = newLink;
}
else
{
    //to be implemented
}
}

template < typename T >
void fsu::Queue<T>::Display (std::ostream& os, char ofc) const // output contents
// through os
{
  os << firstLink_ << std::endl;
  os << lastLink_ << std::endl;
  Link * currLink = firstLink_;
  while (currLink)
  {
    currLink = currLink -> nextLink_;
    os << currLink << std::endl;
  }
 }
约翰·B
  os << firstLink_ << std::endl;
  os << lastLink_ << std::endl;

打印指向的地址(即变量携带的值),而不是指向的项目。

您必须取消引用指针!然后,您得到一个Link结构,然后必须从中选择_element要打印成员:

  os << (*firstLink_)._element << std::endl;
  os << (*lastLink_).element << std::endl;

更短更常见:

  os << firstLink_->_element << std::endl;
  os << lastLink_->_element << std::endl;

显式取消引用的需要不同于Java和C#,在Java和C#中,引用是从程序员“隐藏”并由语言处理的。在C和C ++中,指针变量仅保存内存地址。您可以直接操作内存地址(google为“指针算术”);因此,有必要将指针值(即地址)与所指向的值(位于该地址)区分开。

希望这不会太令人困惑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在LinkedList中实现队列

来自分类Dev

在Java中实现队列

来自分类Dev

优先级队列库中的C ++推送功能在我的环境中不起作用

来自分类Dev

实现队列的删除功能时,原型声明错误

来自分类Dev

在C ++中实现优先级队列

来自分类Dev

在QT5中实现原子队列

来自分类Dev

在F#中实现队列类型

来自分类Dev

在Linux内核中如何实现消息队列?

来自分类Dev

在C ++中实现优先级队列

来自分类Dev

队列实现中的未绑定模块类型

来自分类Dev

使用c的堆栈推送功能,使用双向链表实现

来自分类Dev

jQuery图像交换功能中的损坏队列

来自分类Dev

在Localytics推送通知中实现深层链接

来自分类Dev

如何使用sidekiq在特定的队列中推送作业并限制人数?

来自分类Dev

Erlang:从共享队列中推送和拉取

来自分类Dev

ironMQ推送队列响应

来自分类Dev

Laravel 5.5。队列推送

来自分类Dev

Python中的功能中缀实现

来自分类Dev

在SQL中实现全部功能

来自分类Dev

在C中实现Split功能

来自分类Dev

在Fortran中实现匿名功能

来自分类Dev

在Erlang中实现放置功能

来自分类Dev

在AVCamViewController中实现“缩放”功能

来自分类Dev

在方案中实现“累计”功能

来自分类Dev

如何将stl队列推送功能绑定到std :: function?

来自分类Dev

使用VM队列在CloudHub中实现可靠性模式

来自分类Dev

队列数据结构中is_empty的线程安全实现

来自分类Dev

之所以在Java中不同的实现栈和队列?

来自分类Dev

如何显示使用c中的链表实现的队列元素?