- 论坛徽章:
- 0
|
#include <iostream>
#include <cstdio>
#include <cstddef>
#include <cassert>
using std::ostream;
using std::cout;
class Histogram {
public:
Histogram (ptrdiff_t minval, size_t gap, size_t nbins);
~Histogram () { delete[] bin_; }
void record (ptrdiff_t);
void output_to (std::ostream&);
private:
ptrdiff_t const minval_,maxval_;
size_t const gap_;
size_t *const bin_;
size_t n_too_small_, n_too_large_;
};
Histogram :: Histogram(ptrdiff_t m, size_t g, size_t n)
: minval_(m), maxval_(m+n*g-1), gap_(g),
bin_(new size_t[n]), n_too_small_(0), n_too_large_(0) {
assert(g != 0 && n != 0);
}
void Histogram :: record (ptrdiff_t datapoint) {
if (datapoint < minval_)
++n_too_small_;
else if (datapoint > maxval_)
++n_too_large_;
else
++bin_[(datapoint - minval_) / gap_];
}
void Histogram :: output_to(std::ostream& output) {
output << "<" << minval_ << ":" << n_too_small_ << "n";
for (ptrdiff_t left = minval_; left < maxval_; left += gap_) {
output << left << ":" << bin_[(left-minval_)/gap_] << "n";
}
output << ">" << maxval_<<":" << n_too_large_<<"n";
}
int main () {
Histogram h(1, 1, 10);
for (ptrdiff_t i = 0; i < 10; i ++) {
h.record(i);
}
h.output_to(cout);
return 0;
} |
这是《C++程序设计语言》那本习题题解书上的解答,别的其实不用看了,主要看那个output_to函数,编译一下,然后用valgrind查看运行,会有memory error,我不清楚标准库本来就这样,还是什么地方没用对,多谢。 |
|