免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2153 | 回复: 0
打印 上一主题 下一主题

[C++] 请教 <C++程序设计语言题解> 第10章直方图习题的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-22 16:52 |只看该作者 |倒序浏览
#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,我不清楚标准库本来就这样,还是什么地方没用对,多谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP