其实一开始这个类的data我是用vector实现的,后面排序的时候发现如果给的是char或string,自己用qsort时调用的cmp函数就要重新区分开其他来写了。比如给bcda排序应该是abcd,但按其他类型那样处理是dcba。这个地方需要注意。于是我就用了更方便的list。list的用法和其他类似的大同小异,同样可以push_back,用迭代器遍历。还是要注意输出的时候后面是有空格的(题目里是没有的...)
#include <iostream>
#include <list>
#include <algorithm>
#include <string>
using namespace std;
template <typename T>
int cmp(const T *a, const T *b)
{
return *(int*)a - *(int*)b;
}
template <typename T>
class SortableArray
{
public:
SortableArray(int maxSize_ = 0)
{
maxSize = maxSize_;
}
void pushBack(T item)
{
data.push_back(item);
}
void printArray()
{
typename list<T>::const_iterator iter = data.begin();
while (iter != data.end())
{
cout << *iter++ << " ";
}
cout << endl;
}
void sort()
{
data.sort();
}
private:
int maxSize;
list <T> data;
};
int main()
{
int maxSize = 10;
SortableArray< string > arr(maxSize);
arr.pushBack("a");
arr.pushBack("d");
arr.pushBack("b");
arr.pushBack("c");
arr.printArray();
arr.sort();
arr.printArray();
return 0;
}