【发布时间】:2017-08-28 17:09:05
【问题描述】:
我正在编写一个类来测试不同排序算法(对于大学课程)的效率,而我应该测试的算法是 STL 排序。为了衡量效率,我们定义了一个 Integer 类,它保存整数值,并且还允许我们在每次比较或分配全局变量时递增它。然后我有一个驱动程序类,它测试对多个整数向量的 std::sort 调用。我在我的 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::sort 函数没有使用我的 Integer 类中的重载运算符,这会弄乱堆栈。我不确定这是不是错误,但似乎无法解决。
【问题讨论】:
-
您没有为 std::vectors 分配任何空间。
one[i]不创建新元素。使用one.push_back(Integer(i)); -
vector[] 不插入新元素 - 使用 push_back 代替
-
要保留向量空间,例如写
std::vector<Integer> one(10000)。替代方案:one.reserve(10000)并在循环中使用one.push_back(Integer(i))而不是赋值。
标签: c++ algorithm sorting c++11 stl