构造函数有问题,应该为m_pList = new int[m_iSize],这样申请的才是一个数组,析构函数才会正确执行
m_pList = new int[m_iSize];
构造函数中这行代码申请数组应该用中括号[ ]。即使如此,你仍然可以看到程序运行结果。因为:
“程序会在释放缓冲区时通知您,而不是在您犯错时”-- 参考:
不仔细看还真不好看出来~
???
环境不对或者main函数 编译器之类的问题。
怎么解决的呢?
问题已解决
插入删除里面有加减
等于0 也就是说没有取到东西,是不是函数有点小错误,比如参数没有加&。
你所说的第一个return出来的i,它是一个数组的下标,因为下标是从0开始的,所以返回值当然要+1才是对的;而第二个return -1,那是用来区分表示的,我们都知道return 1表示OK或者TRUE,return 0则表示ERROR或者是FALSE,那么-1就是用来这样子区别的。以上是我的理解,希望对你有用!若有不同见解,大家一起讨论
ListInsert这个方法中if(i<0||i>=m_iLength) { return false;} 这个判断错了。
一开始m_iLength=0; 你执行 list->ListInsert(0,&e1);时,传入i=0 就return false;了,当然也就没法正确插入元素。
要理解m_iLength这个变量其实总是指向于数组最后一个元素的下一个元素。插入时是允许插入在该位置上的。删除时才不能删除该位置的元素。
应该改成if(i<0 || i > m_iLength) {return false;}
顺便一说,ListDelete这个方法相应的地方也是错的。
你清空后再遍历输出当然没有了
你这个是链表么? 为啥还有长度啊?
使用中括号
List *list1=new List[10]
bool OrderTab<T>::insertElemt(int i,T e){ //连续插入的
if (i<0 || i>m_iLength || m_iLength==m_iSize) //超出容量就不再插入,应该判断 m_iSize==m_iLength
return false;
for (int j = m_iLength - 1; j >= i; j--)
m_pList[j + 1] = m_pList[j];
m_pList[i] = e;
m_iLength++;
return true;
}
http://blog.csdn.net/cool_mirror/article/details/1722753
没有调用遍历函数,或遍历函数没有输出
对的哎,就是赋初值的意思。开辟List类型的空间,用指针指向该空间,并赋初值为10。这具体应该看List是不是被用作初始化了,要是的话就应该另说了吧。
后面的那个是开辟一个数组空间,可存放10个元素,返回数组的起始地址。
List.h应该放在头文件中,而List.cpp应该放在源文件中,只是用#include"List.h"包含进源文件中
老师这样定义的 int temp; 是一个整型变量,当调用删除函数是传入的实参是 &temp,是为将删除的元素能存入到temp中。你提出的 cout<<temp<<endl ; 这是是输出temp的值。要输出它的地址应该写成cout<<&temp<<endl ; 希望对你有帮助。
一共只做了七次插入操作,何来八个数据?