erroe when write the member function“mergeList” in a linear list
Code:
#include<iostream>
using namespace std;
const int DefaultSize = 100;
class List
{
public:
List();
List(size_t size);
List(List &L);
~List();
bool insert(const int);
void ClearList();
bool IsEmpty();
size_t ListLen();
int GetElem(size_t);
void append(size_t,int);//在第i个位置插入数值
void Display();
void remove(size_t);
List& merge(List &L);
int FindElem(int elm);
private:
size_t MaxSize;
size_t list_len;
int *element;
};
List::List()
{
MaxSize = DefaultSize;
list_len = 0;
element = new int[MaxSize];
}
List::List(size_t size)
{
MaxSize = size;
list_len = 0;
element = new int[MaxSize];
}
List::List(List &L)
{
list_len = 0;
size_t L_size = L.ListLen();
MaxSize = 2*(list_len+L_size);
for (size_t i = 0; i != L_size; ++i)
{
insert(L.GetElem(i));
}
}
List::~List()
{
delete []element;
}
bool List::insert(const int a)
{
if (list_len == MaxSize)
return false;
element[list_len++] = a;
return true;
}
bool List::IsEmpty()
{
return list_len == 0;
}
int List::GetElem(size_t size)
{
if(size > list_len)
throw runtime_error("error");
return element[size];
}
void List::Display()
{
if(IsEmpty())
cout << "List is empty" << endl;
else
for (size_t i = 0; i < list_len; ++i)
cout << element[i] << " ";
}
size_t List::ListLen()
{
return list_len;
}
void List::append(size_t i, int num)
{
if(i < 0 || i > MaxSize)
{
cout << "append invalid" << endl;
}
if (i == list_len)
{
this->insert(num);
}
else
{
for(size_t j = list_len-1; j != i-2; --j)
{
if(j == list_len-1)
this->insert(element[j]);
else
element[j+1] = element[j];
}
element[i-1] = num;
}
}
void List::remove(size_t i)
{
if(i < 0 || i > list_len)
{
cout << "remove invalid" << endl;
}
else
{
for(size_t j = i; j != list_len+1; ++j)
{
element[j-1] = element[j];
}
--list_len;
}
}
List& List::merge(List &L)
{
if(L.IsEmpty())
return *this;
size_t size = list_len + L.ListLen();
List merge_L(MaxSize+L.ListLen());
for (size_t i = 0; i != size; ++i)
{
if (i < list_len)
{
merge_L.insert(element[i]);
}
else
{
merge_L.insert(L.GetElem(i-list_len));
}
}
return merge_L;
}
int List::FindElem(int elm)
{
for (size_t i = 0; i != list_len; ++i)
{
if (element[i] == elm)
return i+1;
}
return -1;
}
int main()
{
List l,m,n;
l.insert(11);
l.insert(12);
m.insert(13);
m.insert(0);
List Q(l.merge(m));
cout << endl;
}
when i run it in VS2008,it reads “can't read the memory ‘’0XCCCCC”,i think there is some error in the fuction “merge”,but how the deal with it ?