// 4.1 假设一个线性表包含下列元素:
// < 12, 23, 15, 5, 9 >
// 用顺序表写出这些元素,并且删除值为15的元素。
#include <iostream>
using namespace std;
const int Default = 5;
template < typename Elem >
class List
{
public:
Elem element;
List *next;
};
template <typename Elem>
class AList: public List<Elem>
{
private:
int MaxSize;
int fence;
int ListSize;
Elem * ArrayList;
public:
AList (int size = Default)
{
MaxSize = size;
ListSize = 0;
fence = 0;
Elem * Arraylist = new Elem[size];
cout << "Creat Success! ";
}
~Alist ()
{
delete [] Arraylist;
ListSize = 0;
MaxSize = 0;
fence = 0;
cout << " Destory Success! ";
}
bool insert(Elem & elemval)
{
if (fence == Maxsize) return false;
for (int i = ListSize; i > fence; i--)
ArrayList[i] = ArrayList[i - 1];
ArrayList[fence] = elemval;
++ListSize;
fence++;
}
bool find(Elem & elemval)
{
for (int i = 0; i < ListSize; i++)
{
if (elemval == ArrayList[i])
{
fence = i;
return 1;
}
}
return 0;
}
bool del(Elem & elemval)
{
for (int i = ListSize; i < fence; i--) // 算法错
ArrayList[i - 1] = ArrayList [i];
ListSize--;
}
void show()
{
for (int i = 0; i < ListSize; i++)
cout << ArrayList[i] << ' ';
}
};
int main()
{
AList<int> arow;
int t[5] = {12, 23, 15, 5, 9};
for ( int i = 0; i < 5; i++)
arow.insert(t[i]);
if(arow.find(t[2]))
arow.del(t[2]);
else
cout << "delete error";
arow.show();
return 0;
}
/****
1>------ 已启动生成: 项目: test, 配置: Debug Win32 ------
1>正在编译...
1>41 delete a element - 副本.cpp
1>g:\temp\新建文件夹\41 delete a element - 副本.cpp(37) : error C2523: 'AList<Elem>::~Alist' : destructor tag mismatch
1> g:\temp\新建文件夹\41 delete a element - 副本.cpp(82) : see reference to class template instantiation 'AList<Elem>' being compiled
1>g:\temp\新建文件夹\41 delete a element - 副本.cpp(37) : error C2523: 'AList<Elem>::~Alist' : destructor tag mismatch
1> with
1> [
1> Elem=int
1> ]
1> g:\temp\新建文件夹\41 delete a element - 副本.cpp(86) : see reference to class template instantiation 'AList<Elem>' being compiled
1> with
1> [
1> Elem=int
1> ]
1>生成日志保存在“file://g:\Temp\新建文件夹\test\test\Debug\BuildLog.htm”
1>test - 2 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
*/
/************
你new到局部新定义的指针了,函数返回这个地址就没了,new的内存也就那么放着没法用,也就是内存泄露了
类里不是有个成员指针么,直接用他就行
//Elem * Arraylist = new Elem[size];
ArrayList = new Elem[size];
*****************************************/
// 建立项目应建控制台。
// < 12, 23, 15, 5, 9 >
// 用顺序表写出这些元素,并且删除值为15的元素。
#include <iostream>
using namespace std;
const int Default = 5;
template < typename Elem >
class List
{
public:
Elem element;
List *next;
};
template <typename Elem>
class AList: public List<Elem>
{
private:
int MaxSize;
int fence;
int ListSize;
Elem * ArrayList;
public:
AList (int size = Default)
{
MaxSize = size;
ListSize = 0;
fence = 0;
Elem * Arraylist = new Elem[size];
cout << "Creat Success! ";
}
~Alist ()
{
delete [] Arraylist;
ListSize = 0;
MaxSize = 0;
fence = 0;
cout << " Destory Success! ";
}
bool insert(Elem & elemval)
{
if (fence == Maxsize) return false;
for (int i = ListSize; i > fence; i--)
ArrayList[i] = ArrayList[i - 1];
ArrayList[fence] = elemval;
++ListSize;
fence++;
}
bool find(Elem & elemval)
{
for (int i = 0; i < ListSize; i++)
{
if (elemval == ArrayList[i])
{
fence = i;
return 1;
}
}
return 0;
}
bool del(Elem & elemval)
{
for (int i = ListSize; i < fence; i--) // 算法错
ArrayList[i - 1] = ArrayList [i];
ListSize--;
}
void show()
{
for (int i = 0; i < ListSize; i++)
cout << ArrayList[i] << ' ';
}
};
int main()
{
AList<int> arow;
int t[5] = {12, 23, 15, 5, 9};
for ( int i = 0; i < 5; i++)
arow.insert(t[i]);
if(arow.find(t[2]))
arow.del(t[2]);
else
cout << "delete error";
arow.show();
return 0;
}
/****
1>------ 已启动生成: 项目: test, 配置: Debug Win32 ------
1>正在编译...
1>41 delete a element - 副本.cpp
1>g:\temp\新建文件夹\41 delete a element - 副本.cpp(37) : error C2523: 'AList<Elem>::~Alist' : destructor tag mismatch
1> g:\temp\新建文件夹\41 delete a element - 副本.cpp(82) : see reference to class template instantiation 'AList<Elem>' being compiled
1>g:\temp\新建文件夹\41 delete a element - 副本.cpp(37) : error C2523: 'AList<Elem>::~Alist' : destructor tag mismatch
1> with
1> [
1> Elem=int
1> ]
1> g:\temp\新建文件夹\41 delete a element - 副本.cpp(86) : see reference to class template instantiation 'AList<Elem>' being compiled
1> with
1> [
1> Elem=int
1> ]
1>生成日志保存在“file://g:\Temp\新建文件夹\test\test\Debug\BuildLog.htm”
1>test - 2 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
*/
/************
你new到局部新定义的指针了,函数返回这个地址就没了,new的内存也就那么放着没法用,也就是内存泄露了
类里不是有个成员指针么,直接用他就行
//Elem * Arraylist = new Elem[size];
ArrayList = new Elem[size];
*****************************************/
正确的代码:
// 4.1 假设一个线性表包含下列元素:
// < 12, 23, 15, 5, 9 >
// 用顺序表写出这些元素,并且删除值为15的元素。
#include <iostream>
using namespace std;
const int Default = 5;
template < typename Elem >
class List
{
public:
Elem element;
List *next;
};
template <typename Elem>
class AList: public List<Elem>
{
private:
int MaxSize;
int fence;
int ListSize;
Elem * ArrayList;
public:
AList (int size = Default)
{
MaxSize = size;
ListSize = 0;
fence = 0;
ArrayList = new Elem[size];
cout << "Creat Success! ";
}
~AList ()
{
delete [] ArrayList;
ListSize = 0;
MaxSize = 0;
fence = 0;
cout << " Destory Success! ";
}
bool insert(Elem & elemval)
{
if (fence == MaxSize) return false;
for (int i = ListSize; i > fence; i--)
ArrayList[i] = ArrayList[i - 1];
ArrayList[fence] = elemval;
++ListSize;
fence++;
return true;
}
bool find(Elem & elemval)
{
for (int i = 0; i < ListSize; i++)
{
if (elemval == ArrayList[i])
{
fence = i;
return 1;
}
}
return 0;
}
bool del(Elem & elemval)
{
for (int i = fence; i < ListSize; i++)
ArrayList[i] = ArrayList [i + 1];
ListSize--;
return true;
}
void show()
{
for (int i = 0; i < ListSize; i++)
cout << ArrayList[i] << ' ';
}
};
int main()
{
AList<int> arow;
int t[5] = {12, 23, 15, 5, 9};
for ( int i = 0; i < 5; i++)
arow.insert(t[i]);
if(arow.find(t[2]))
arow.del(t[2]);
else
cout << "delete error";
arow.show();
cin.get();
return 0;
}
// 建立项目应建控制台。