c++ - 为什么我的单链表中的迭代器类在 C++ 中给我一个分段错误?
问题描述
全部。
我目前正在处理我的单链表,并在我的迭代器类中遇到了障碍。到目前为止,这就是我所拥有的,我将从节点开始,然后是单链表,然后是它自身的迭代器。
我的节点目前看起来像这样。对于下面我的代码中显示的“语法错误”,我提前道歉。如果不影响本网站中的代码文本,我将无法正确缩进。我仍然习惯于 stackoverflow 的工作方式。
#include <iostream>
#include <cstddef>
class SingleNode
{
private:
int key_;
SingleNode * next_;
public:
SingleNode(int key, SingleNode * next = NULL)
: key_(key), next_(next)
{
}
void set_key(int key)
{
key_ = key;
}
int get_key() const
{
return key_;
}
int & get_key()
{
return key_;
}
SingleNode * get_next() const
{
return next_;
}
SingleNode * set_next(SingleNode * next)
{
next_ = next;
}
};
std::ostream & operator<<(std::ostream & cout, const SingleNode & node)
{
cout << "< " << ' ' << &node << ' '
<< "key: " << node.get_key() << ' '
<< "next: " << node.get_next() << '>';
return cout;
}
现在是我的单链表
#include <iostream>
#include <cstddef>
#include "SingleNode.h"
class SingleNode;
class SingleLinked
{
private:
SingleNode * phead_;
public:
SingleLinked()
: phead_(NULL)
{
}
class iterator
{
friend class SingleLinked;
private:
SingleNode * p;
iterator(SingleNode * phead)
: p(phead)
{
}
public:
iterator()
: p(NULL)
{
}
int & operator*()
{
return p->get_key();
}
int & operator++()
{
p = p->get_next();
}
};
iterator begin() const
{
return iterator(phead_);
}
SingleNode * get_phead() const
{
return phead_;
}
SingleNode * insert_head(int key)
{
phead_ = new SingleNode(key, phead_);
}
SingleNode * insert_tail(int key)
{
SingleNode * p = new SingleNode(key, NULL);
SingleNode * r = p;
SingleNode * q = phead_;
while (q->get_next() != NULL)
{
q = q->get_next();
}
q->set_next(r);
}
void delete_head()
{
SingleNode * p = phead_;
phead_ = p->get_next();
}
void delete_tail()
{
SingleNode * p = phead_;
while (p->get_next() != NULL)
{
p = p->get_next();
}
SingleNode * r = phead_;
while (r->get_next() != p)
{
r = r->get_next();
}
r->set_next(NULL);
}
void print()
{
while (phead_ != NULL)
{
std::cout << *phead_ << std::endl;
phead_ = phead_->get_next();
}
}
};
这个想法是这样的,我想使用 SingleLinked 类作为迭代器的朋友类。这样,一旦 SingleLinked 类在 main 中初始化,它就会自动在其中构造迭代器。一旦我开始使用开始方法,这就会遇到一些问题。
这是迄今为止的主要内容。
#include <iostream>
#include "SingleLinked.h"
int main()
{
SingleLinked list;
list.insert_head(1);
list.insert_tail(2);
typename SingleLinked::iterator p = list.begin();
std::cout << *p << std::endl;
return 0;
}
一旦我尝试计算该迭代器 p,它就会在控制台中显示分段错误。我的 SingleLinked 类本身内部发生了什么导致这种情况?
解决方案
推荐阅读
- mysql - SQLyog 函数:从 INNER JOIN 返回值时出现语法错误
- javascript - 函数中意外未定义
- memory-management - 这里的每个 24 位页表条目如何?
- docker - 使用 Dockerfile 在 700 (drwx------) 目录下创建文件
- javascript - 在javascript中从json读取数据并过滤数据
- linear-algebra - 基本计算问题:指数表达式
- ios - 在 Swift 中转换视频文件时如何设置最小输出大小?
- python-3.x - AWS Lambda 未在 Python 3.8 中显示原因异常堆栈跟踪
- javascript - 从服务器端获取信息到我的前端
- firebase - TypeError:未定义不是对象(评估事件[0].name)