(MinGW编译器不支持 模板声明与定义分离在多个文件中)
// sequencelist.h
#ifndef SEQUENCELIST_H
#define SEQUENCELIST_H
#include <iostream>
const int DefaultSize = 100;
template<typename Type> class SequenceList
{
public:
SequenceList(int size = DefaultSize) : m_nmaxsize(size), m_ncurrentsize(-1)
{
if(size > 0)
{
m_elements = new Type[m_nmaxsize];
}
}
~SequenceList()
{
delete m_elements;
}
Type GetElementByIndex(int index)
{
if(index < 0 || index > m_ncurrentsize)
{
std::cout << "can't find the element" << std::endl;
return ;
}
return m_elements[index];
}
int Length() const
{
return m_ncurrentsize;
}
int Find(Type x) const;
int IsElement(Type x) const;
int Insert(Type x, int i);
int Remove(Type x);
int IsEmpty()
{
return m_ncurrentsize == -1;
}
int IsFull()
{
return m_ncurrentsize == m_nmaxsize-1;
}
void Print();
private:
Type* m_elements;
const int m_nmaxsize;
int m_ncurrentsize;
};
template<typename Type> void SequenceList<Type>::Print()
{
int i = 0;
for(; i <= m_ncurrentsize; i++)
{
std::cout << i+1 << " : " << m_elements[i] << std::endl ;
}
std::cout << std::endl << std::endl;
}
template<typename Type> int SequenceList<Type>::Find(Type x) const
{
for(int i=0; i < m_ncurrentsize; i++)
{
if(m_elements[i] == x)
return i;
}
return -1;
}
template<typename Type> int SequenceList<Type>::IsElement(Type x) const
{
if(Find(x) == -1)
return 0;
return 1;
}
template<typename Type> int SequenceList<Type>::Insert(Type x, int i)
{
if(i < 0 || i > m_ncurrentsize+1 || m_ncurrentsize==m_nmaxsize-1)
{
std::cout << __FUNCTION__ << " error " << std::endl;
return 0;
}
m_ncurrentsize++;
for(int j = m_ncurrentsize; j > i; j--)
{
m_elements[j] = m_elements[j-1];
}
m_elements[i] = x;
return 1;
}
template<typename Type> int SequenceList<Type>::Remove(Type x)
{
int i = Find(x);
if(-1 == i )
{
std::cout << "can't find the element you want to remove" << std::endl;
return 0;
}
else
{
for(int j = i; j < m_ncurrentsize; j++)
{
m_elements[j] = m_elements[j+1];
}
m_ncurrentsize--;
return 1;
}
}
#endif // SEQUENCELIST_H
test
// main.cpp
#include <iostream>
#include "sequencelist.h"
using namespace std;
int main(int argc, char *argv[])
{
SequenceList<int> test(15);
int array[15] = {2, 5, 8, 1, 9, 9, 7, 6, 4, 3, 2, 9, 7, 7, 9};
for(int i = 0; i < 15; i++)
{
test.Insert(array[i], 0);
}
test.Print();
test.Remove(7);
test.Print();
test.Remove(9);
test.Print();
test.Remove(0);
test.Print();
return 0;
}