我正在寫一個類來測試不同排序算法(針對大學課程)的效率,以及我應該測試的算法的效率是STL排序。爲了衡量效率,我們定義了一個保持整型值的類Integer,並且允許我們在每次比較或分配時增加一個全局變量。然後我有一個驅動程序類,它測試多個整數向量上的std :: sort調用。我在Integer類中重載了'<'運算符,它符合嚴格的弱排序(至少我非常肯定它的確如此)。但是,每次我打電話排序時,都會出現分段錯誤。我真的不知道爲什麼發生這種情況,任何幫助將不勝感激。謝謝!std :: sort不適用於用戶定義的對象與oveloaded <運算符
Integer.cpp
#include "Integer.h"
int Integer_count;
//Default Constructor
Integer::Integer() {
val = 0;
}
//Specified Constructor
Integer::Integer(int x) {
val = x;
}
//Copy-Constructor
Integer::Integer(const Integer &cp) {
Integer_count++;
val = cp.val;
}
//Return the Integer's value
int Integer::value() {
return val;
}
//Less-than (<) operator overload
bool Integer::operator < (const Integer& obj) const {
Integer_count++;
return (val < obj.val);
}
//Assignment (=) operator overload
void Integer::operator = (const Integer& obj) {
Integer_count++;
val=obj.val;
}
driver.cpp
#include <iostream>
#include <cstdlib>
#include <vector>
#include "Integer.h"
#include "Sorter.cpp"
srand (time(NULL)); //Seed the random number generator
std::vector<Integer> one;
std::vector<Integer> two;
std::vector<Integer> three;
std::vector<Integer> four;
std::vector<Integer> five;
for(int i=0; i<10000; i++){
one[i] = Integer(i);
two[i] = Integer(10000-i);
three[i] = Integer(rand() % (10000+1));
four[i] = Integer(rand() % (10000+1));
five[i] = Integer(rand() % (10000+1));
}
//Sort function called from the STL
//Sorted Array
std::sort(one.begin(), one.end());
std::cout << "STL for Sorted Array: " << Integer_count << std::endl;
基本上,我認爲的std ::排序功能不使用重載操作從我的Integer類,其正在搞亂堆棧。我不確定這是錯誤,但似乎無法解決它。
你沒有爲你的std :: vectors分配任何空間。 '一個[我]'不會創建一個新元素。使用'one.push_back(Integer(i));' –
vector []不插入新元素 - 使用push_back代替 – 4386427
要預留向量空間,請寫'std :: vector one(10000)'例如。可選:'one.reserve(10000)'和循環'one.push_back(Integer(i))'而不是賦值。 –
zett42