我讀過很多關於如何做到這一點的材料。不幸的是,他們都使用qsort以外的東西(通常是排序)。然而,這對我來說是不可能的,因爲我不允許使用算法庫中的任何東西。我必須從頭開始實現這一點,非常。我已經有了:qsorting類指針數組
class String {
public:
char* string;
int size;
String(char* string=0, int size=0) {
this->string = string;
this->size = size;
}
~String() {
delete [] string;
}
};
int compare(void* obj1, void* obj2) {
String* str1 = ((String*) obj1)->getColumn(column);
String* str2 = ((String*) obj2)->getColumn(column);
int i = strcmp(str1->string, str2->string);
delete str1;
delete str2;
return i;
}
class ArrayList {
int count;
int arraySize;
public:
String** list;
ArrayList() {
count = 0;
arraySize = 10;
list = new String*[arraySize];
}
~ArrayList() {
while(size()) {
delete remove();
}
}
void add(String* s) {
if(count==arraySize)
grow();
list[count++] = s;
}
String* remove() {
return list[count--];
}
String* get(int i) {
return list[i];
}
int size() {
return count;
}
private:
void grow() {
String** temp = new String*[arraySize*=2];
for(int i=0; i<count; i++) {
temp[i] = list[i];
}
delete [] list;
list = temp;
}
};
和我(目前)調用快速排序,雖然我已經試過許多種組合:
qsort(list->list, list->size, sizeof(String**), compare);
錯誤我總是得到,無所謂我通過什麼:
argument of type ‘int (ArrayList::)()’ does not match ‘size_t’
我在這裏複製的代碼並不包括所有內容,但我已驗證所有這些代碼塊都按預期工作,因此不必擔心丟失的方法等。
學習C++並且不被允許使用標準庫就像去跑步學校並被教導說「我們從基礎開始,所以你只允許使用你的左腿」。當然不是OP的錯,而是他的老師。 – janneb
哦,我們被允許使用標準庫,只是不用於這個項目。在下一個項目中,我們可以使用字符串而不是cstrings,而在此之後的項目中我們可以使用標準庫。他只是希望我們能夠深入瞭解我們正在做的事情。這不是編程的入門課程,它是一個編程概念類,我們恰好使用C++。 –
'qsort'與'std :: sort'完全一樣,除了一些令人討厭的演員,沒有任何目的,但會導致學生不必要的混淆。 – MSalters