c++-请问我的list为什么popback会不好使,请麻烦各位帮帮忙,谢谢

问题描述

请问我的list为什么popback会不好使,请麻烦各位帮帮忙,谢谢

#include
using namespace std;
template
struct list_node
{
list_node* next; // 指向下一个节点的指针
list_node* prev; // 指向前一个节点的指针
T data; //list 数据

};

template
class list;

template
class list_iterator
{

public:
friend class list;

private:
typedef list_node* link_type;
list_node* node;//数据成员 ,为一个节点的指针。

//比较iterator是否相等

public:
list_iterator()
{

}

list_iterator(list_node<T>* p)
{
     node = p ;
}

int operator==(const list_iterator<T>& x) const
 {
     return node == x.node;
 }
int operator!=(const list_iterator<T>& x) const
 {
     return node != x.node;
 }

//*操作符,使得访问iterator就像访问一个指针
T& operator*() const
{
return (*node).data;
}
//自增操作符. ++
list_iterator& operator++()
{
node = (link_type)((*node).next); //使iterator包含的是下一个节点
return *this;
}
//自减操作符 --
list_iterator& operator--()
{
node = (link_type)((*node).prev);
return *this;
}
};

template
class list
{

public:
typedef list_iterator iterator;
typedef list_node* link_type;
private:
link_type node;
link_type node_head;

link_type node_end;
link_type node_tend;
size_t length; //list的长度。
public:

//默认构造函数,创建一个空的list
list()
{
length = 0;
node_end = node_head = NULL;
node = node_end;

}

~list()
{
    this->clear();
}

public:
iterator begin()
{
list_iterator p_ite;
p_ite = node_head;
return p_ite;

}
//返回list的末节点。注意,末节点是最后一个元素的下一个节点。末节点不包含元素的值
iterator end()
{
list_iterator p_ite;
p_ite = node_end->next;
return p_ite;
}
//判断是否为空
bool empty() const
{
return length == 0;
}
// 返回list的长度
size_t size() const
{
return length;
}
//返回list的头部 值引用
T& front()
{
return begin();
}
//返回list的末尾 值的引用
T& back()
{
return *(--end());
}
//在指定iterator之前插入新结点
void insert(list_iterator position,int n, const T& x)//insert(插入的位置,插入的个数,插入的数值)
{
for(int i=0;i
{
list_node
temp = new list_node;
temp->data = x;
temp->next = position.node;
position.node->prev->next = temp;
temp->prev = position.node->prev;
position.node->prev = temp;
position.node = temp;
}
}
// 在头部插入一个元素
void push_front(const T& x)
{
insert(begin(),1,x);
}
//在尾部插入一个元素
void push_back(const T& x)
{
list_node* temp = new list_node;
temp->data = x;
temp->next = NULL;
temp->prev = NULL;
//如果链表为空
if(node_head == NULL)
{
node_head = node_end = temp;
}
//若果有多个节点
else
{
node_end->next = temp;
temp->prev = node_end;
}
node_end = temp;
length++;
}
// 删除一个结点
iterator erase(list_iterator position)
{
link_type next_node = (link_type)position.node->next;
link_type prev_node = (link_type)position.node->prev;
prev_node->next = next_node;
next_node->prev = prev_node;
delete(position.node);
--length; //长度减1
return iterator(next_node);
}
// 清空一个list的所有元素
void clear()
{
list_node* temp = node_head;
list_node* deltemp = NULL;
while(temp != NULL)
{
if(temp->next == NULL)
{
delete temp;
temp = NULL;
break ;
}
deltemp = temp;
temp = temp->next;
delete deltemp;
deltemp = NULL;

}
length = 0;
node_end = node_head = NULL;
node = node_end;
}
//删除头部元素
void pop_front()
{
erase(begin());
}
//删除尾部元素
void pop_back()
{
iterator temp = end();
erase(temp);
}
list(int a)
{
length = 0;
node_end = node_head = NULL;
node = node_end;
for(int i=0;i<a;i++)
{
push_back(0);
}
}
list(int a,int b)
{
length = 0;
node_end = node_head = NULL;
node = node_end;
for(int i=0;i<a;i++)
{
push_back(b);
}
}
};

解决方案

崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

时间: 2024-10-03 04:24:24

c++-请问我的list为什么popback会不好使,请麻烦各位帮帮忙,谢谢的相关文章

请问大家,为什么value的值是空指针呢?程序很简单,请大家帮帮忙!!谢谢

问题描述 importjava.io.IOException;importjava.io.StringReader;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;importorg.xml.sax.InputSource;importorg.xml.sax.SAXE

各位大虾帮帮忙!:) 请问在水晶报表里如何使用得到这个函数呢? padleft(*,&amp;amp;quot;*&amp;amp;quot;)

问题描述 请问在水晶报表里如何使用得到这个函数呢?padleft(*,"*")急用!请各位大虾帮帮忙~~先谢了! 解决方案 解决方案二:先使用Length函数求长度,再加上指定个数的字符即可解决方案三:该回复于2014-07-18 10:31:24被版主删除解决方案四:该回复于2015-08-29 09:06:28被版主删除

请问谁有wpf模仿360样式的案例,我需要模板,谢谢

问题描述 请问谁有wpf模仿360样式的案例,我需要模板,谢谢 请问谁有wpf模仿360样式的案例,我需要模板,谢谢,就是类似360那种样式的demo 解决方案 wireshark抓取的数据包文件是pcap格式,如何java读取文件中HTTP数据头的内容 解决方案二: CSDN上有一些例子的,还有迅雷的,等等,你搜索一下就性了,如果找不到或者没有积分,邮箱给我,我发给你. 解决方案三: http://www.cnblogs.com/bdstjk/p/3164972.html

java socket 多线程-请问下面这个程序,在不改变功能的前提下,可以改装成多线程运行吗?*请贴上代码,谢谢*

问题描述 请问下面这个程序,在不改变功能的前提下,可以改装成多线程运行吗?*请贴上代码,谢谢* import java.net.*; // for Socket, ServerSocket, and InetAddress import java.io.*; // for IOException and Input/OutputStream public class Server { private static final int BUFSIZE = 32; // Size of receiv

用c语言读写bmp图像,图像的高和宽输出不正确,请问代码哪里有问题?哪位大神可以解答一下,谢谢

问题描述 用c语言读写bmp图像,图像的高和宽输出不正确,请问代码哪里有问题?哪位大神可以解答一下,谢谢 #include #include #include int ReadBmp(const char bmpName); /函数原型*/BITMAPFILEHEADER fileHead; /*文件信息头*/ BITMAPINFOHEADER infoHead; /*位图信息头*/RGBQUAD pColorTable[256]; /*颜色表指针*/unsigned char pBmpBuf;

命令模式-请问如下问题需要使用什么设计模式解决?请详述

问题描述 请问如下问题需要使用什么设计模式解决?请详述 如图所示,请帮忙一下 解决方案 说的过于笼统,关键看哪里需要扩展,哪里不需要扩展.如果处处需要扩展,那就得把设计模式用个遍了. 解决方案二: 这个面向对象就可以了,每个项目做一个类,然后动作封装成类的函数,操作时就是调用这些各个项目的类.用一个链表什么的维护来灵活增加,删除 解决方案三: 面向对象的编程问题,好好看看C++之类的编程问题,不是什么难题

json-各位大神 请问我序列化时数据库数据应该做成什么格式的呢?帮帮忙 小弟初学

问题描述 各位大神 请问我序列化时数据库数据应该做成什么格式的呢?帮帮忙 小弟初学 我要从数据库中将数据放到datetable中然后序列化成下边这种json格式的数据 请问我数据库中数据应该怎么存贮呢? . json数据 [{"CountryName": "阿拉伯联合酋长国","Province": [{"ProvinceName": "Bahrani","City": [{"

离散数学的问题,请问这具体是个什么类型的问题,麻烦给一下具体过程谢谢

问题描述 离散数学的问题,请问这具体是个什么类型的问题,麻烦给一下具体过程谢谢 有两台机器A和B一集若干项需要运行的任务,每个任务在一台机器上运行.采用(k:a,b)表示编号k任务可以在机器A的a模式或机器B的b模式运行,每台机器切换模式需要重启一次.当机器初始为关机状态,每台机器有9种不同的模式,需要执行11项任务:(0:0,1).(1:0,4).(2:1,2).(3:1,5).(4:3,6).(5:4,7).(6:4,8).(7:5,4).(8:5,8).(9:6,7).(10:8,7)时,

请问各位高手extpwd工程在VC下怎么才能编译成功啊?谢谢啦!

问题描述 请问各位高手extpwd工程在VC下怎么才能编译成功啊?谢谢啦! 解决方案 解决方案二:发错地方了吧,兄弟解决方案三:extpwd是LotusNotesc/c++API提供的sample例程,提供了automake脚步,可以直接调用编译器编译.如果需要在VC环境下通过编译,最好新建一个工程.