C++程序设计语言练习10.5 直方图的C++表示

C程序设计语言(第2版·新版)练习题1-13 水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些。编写一个程序,打印输入中单词长度的直方图。按自己的想法写的,欢迎讨论! 阅读详情

答案上的代码如下:


#include <iostream>
#include <stddef.h>
#include <cassert>
struct Histogram{
	Histogram(ptrdiff_t minval, size_t gap, size_t n_bins);
	~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 << ".." << left + gap_ - 1 << ": "
			<< bin_[(left - minval_) / gap_] << "\n";
		output << "> " << maxval_ << ": " << n_too_large_ << '\n';
	}
}

int main()
{
	Histogram h = Histogram(1, 5, 10);
	h.output_to(std::cout);
	h.~Histogram();
	return 0;
}

莫名的析构崩溃。

编译运行环境:Centos7 x64, gcc 6.1

[chaos@localhost cpp]$ ./10.5
< 1: 0
1..5: 0
> 50: 0
6..10: 0
> 50: 0
11..15: 0
> 50: 0
16..20: 0
> 50: 0
21..25: 0
> 50: 0
26..30: 0
> 50: 0
31..35: 0
> 50: 0
36..40: 0
> 50: 0
41..45: 0
> 50: 0
46..50: 0
> 50: 0
*** Error in `./10.5': double free or corruption (fasttop): 0x00000000020b8c20 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x7d023)[0x7f297e715023]
./10.5[0x400f35]
./10.5[0x400e93]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7f297e6b9b15]
./10.5[0x400a89]
======= Memory map: ========
00400000-00402000 r-xp 00000000 fd:00 3124212                            /home/chaos/文档/proc/cpp/10.5
00601000-00602000 r--p 00001000 fd:00 3124212                            /home/chaos/文档/proc/cpp/10.5
00602000-00603000 rw-p 00002000 fd:00 3124212                            /home/chaos/文档/proc/cpp/10.5
020a7000-020d9000 rw-p 00000000 00:00 0                                  [heap]
7f2978000000-7f2978021000 rw-p 00000000 00:00 0 
7f2978021000-7f297c000000 ---p 00000000 00:00 0 
7f297e698000-7f297e84e000 r-xp 00000000 fd:00 134378031                  /usr/lib64/libc-2.17.so
7f297e84e000-7f297ea4e000 ---p 001b6000 fd:00 134378031                  /usr/lib64/libc-2.17.so
7f297ea4e000-7f297ea52000 r--p 001b6000 fd:00 134378031                  /usr/lib64/libc-2.17.so
7f297ea52000-7f297ea54000 rw-p 001ba000 fd:00 134378031                  /usr/lib64/libc-2.17.so
7f297ea54000-7f297ea59000 rw-p 00000000 00:00 0 
7f297ea59000-7f297ea6e000 r-xp 00000000 fd:00 142624879                  /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7f297ea6e000-7f297ec6d000 ---p 00015000 fd:00 142624879                  /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7f297ec6d000-7f297ec6e000 r--p 00014000 fd:00 142624879                  /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7f297ec6e000-7f297ec6f000 rw-p 00015000 fd:00 142624879                  /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7f297ec6f000-7f297ed70000 r-xp 00000000 fd:00 134378041                  /usr/lib64/libm-2.17.so
7f297ed70000-7f297ef6f000 ---p 00101000 fd:00 134378041                  /usr/lib64/libm-2.17.so
7f297ef6f000-7f297ef70000 r--p 00100000 fd:00 134378041                  /usr/lib64/libm-2.17.so
7f297ef70000-7f297ef71000 rw-p 00101000 fd:00 134378041                  /usr/lib64/libm-2.17.so
7f297ef71000-7f297f0e2000 r-xp 00000000 fd:00 141313580                  /usr/lib64/libstdc++.so.6.0.22
7f297f0e2000-7f297f2e2000 ---p 00171000 fd:00 141313580                  /usr/lib64/libstdc++.so.6.0.22
7f297f2e2000-7f297f2ec000 r--p 00171000 fd:00 141313580                  /usr/lib64/libstdc++.so.6.0.22
7f297f2ec000-7f297f2ee000 rw-p 0017b000 fd:00 141313580                  /usr/lib64/libstdc++.so.6.0.22
7f297f2ee000-7f297f2f2000 rw-p 00000000 00:00 0 
7f297f2f2000-7f297f313000 r-xp 00000000 fd:00 134294926                  /usr/lib64/ld-2.17.so
7f297f4f9000-7f297f4fe000 rw-p 00000000 00:00 0 
7f297f510000-7f297f513000 rw-p 00000000 00:00 0 
7f297f513000-7f297f514000 r--p 00021000 fd:00 134294926                  /usr/lib64/ld-2.17.so
7f297f514000-7f297f515000 rw-p 00022000 fd:00 134294926                  /usr/lib64/ld-2.17.so
7f297f515000-7f297f516000 rw-p 00000000 00:00 0 
7ffe2c645000-7ffe2c666000 rw-p 00000000 00:00 0                          [stack]
7ffe2c744000-7ffe2c746000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
已放弃(吐核)


OpenCV4(C++)—— 直方图 直方图(Histogram)最开始在统计学中被提出,由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表示数据类型,纵轴表示分布情况。在图像领域,直方图用来更直观地展现各像素值出现的频率,例如常用的灰度直方图反映的是一幅图像中各灰度像素值(0-255)出现的频率之间的关系。 阅读详情

相关推荐

直方图(histogram)

直方图统计,opencv截取的视频帧,对话框中的picture控件

C++自定义直方图统计

Mat HistCalculate(Mat img) { Mat img_dect = img; img_dect.at<Vec3b>(0, 0)[0]; //获得图像大小 int width = img_dect.cols; int hight = img_dect.rows; //统计直方图数据分别累加每个颜色值的数量 float B[256] = { 0.0 }; ...

weixin_42376458的博客 1720

FPGA数字信号处理中定点数的舍入与饱和硬件实现详解

在数字信号处理(DSP)的硬件实现中,定点数运算是核心基础。由于硬件资源(如FPGA的DSP Slice)的位宽有限,连续的乘加运算会导致数据位宽膨胀,严重影响时序和资源利用率。为解决此问题,必须引入舍入(Rounding)和饱和(Saturation)机制。舍入通过对低位进行四舍五入,在可控的精度损失下缩减位宽;饱和则作为动态范围的守护者,防止数据溢出导致信号环绕失真,确保系统行为确定。这两种技术是算法在有限精度硬件上正确、高效运行的关键,广泛应用于滤波器、FFT等DSP模块以及通信、音频处理等场景。本文

weixin_30954817的博客 248

直方图计算C++代码实现

//计算直方图 vector<vector<int>> CalHistgram(const Mat& img) { vector<vector<int>>histogram(256); for (int i = 0; i < histogram.size(); ++i) histogram[i].resize(3); for (int row = 0; row < img.rows; row++)

xin_hen的博客 2705

做形态学方法的团队_“设计形态学”与“第三自然”

文/邱松(清华大学 美术学院)摘要:“设计形态学”是基于“形态学”研究的设计基础学科。“形态”既是该学科研究的主体,又是与其它学科相连接的“纽带”。实际上,不管是供养我们的地球家园,还是神秘莫测的浩瀚宇宙,均由数量纷繁、千姿百态的“形态”构筑而成。形态通常被分成两大类:一类是源于“第一自然”的“自然形态”;另一类是来自“第二自然”的“人造形态”。而这两类形态正是“设计形态学”研究的两条...

weixin_31548723的博客 2683

Tomcat漏洞——弱口令爆破

靶机:CentOS7 IP:192.168.100.40。攻击机:kali IP:192.168.100.60。版 权 声 明:本博客所有文章除特别声明外,均采用。文章版权归作者所有,未经允许请勿转载!作 者:PeiyuJue。

weixin_57379923的博客 909

C++ 超详细14Bit,16Bit,24Bit,32Bit图像直方图统计并绘制显示(详细图文教程_附C++代码)

C++ OpenCv提供了函数calcHist(),可以很方便的帮助我们统计一幅8Bit图像的直方图,但是对于10Bit,12Bit,14Bit,16Bit,24Bit,32Bit等高位图像就不适用了,无法统计,这时候就需要我们自己手写代码统计高位图像的直方图。

qq_40280673的博客 6048

FreeRTOS实战:STM32CubeMX配置USART+DMA实现高效串口通信(附完整代码)

本文详细介绍了如何使用FreeRTOS和STM32CubeMX配置USART与DMA实现高效串口通信。通过对比轮询、中断和DMA三种模式的性能差异,提供完整的STM32CubeMX配置步骤和代码实现,帮助开发者优化嵌入式系统的串口通信性能,显著提升数据吞吐量和系统响应速度。

weixin_29190169的博客 455

C++ 超详细8Bit图像直方图统计并绘制显示,不使用calcHist()函数(详细图文教程)

C++ OpenCv中提供的函数calcHist()可以很方便的帮助我们统计一幅8Bit图像的直方图,但是有时候我们不想用OpenCv提供的函数来统计,想自己根据自己的需求来做一个统计,那么看这个教程就对了,学会这种方法不仅是8Bit图像可以自己手写统计,10Bit,12Bit,14Bit,16Bit,24Bit,32Bit等图像,都可以自己手写代码实现直方图统计并显示出来。关于16Bit图像直方图统计并显示的具体教程,看我下一篇文章。

qq_40280673的博客 6300

从实验室到晶圆厂:一文看懂二维半导体(如MoS2)的CVD生长与晶体管制造挑战

本文深入探讨了二维半导体(如MoS2)从实验室研究到晶圆厂量产的CVD生长与晶体管制造关键技术挑战。重点分析了晶圆级二维半导体的CVD生长工艺优化、晶体管制造的四大界面工程难题,以及掺杂与集成的产业化解决方案,为二维半导体在集成电路领域的应用提供技术参考。

weixin_42651748的博客 472

Proteus仿真AT89C51驱动DHT11:温湿度数据采集与LCD1602显示的5个调试坑点总结

本文总结了在Proteus仿真环境下使用AT89C51驱动DHT11温湿度传感器并通过LCD1602显示的5个常见调试坑点,包括DHT11时序问题、LCD1602初始化错误、数据校验失败、仿真特有差异及系统稳定性问题,提供了详细的解决方案和优化代码示例,帮助开发者高效完成温湿度采集项目。

weixin_30335575的博客 356

打印输入单词字符数量统计直方图-C语言第二版

打印输入单词字符数量统计直方图-C语言第二版

losangelx的博客 865

openclaw通俗入门系列4——智能体工作区

工作区 = 智能体的家,存放它的性格、记忆、技能。默认不是牢笼(可以用沙箱隔离)。建议放到私有 Git 备份,但绝对不要提交密钥!

m0_60605453的博客 462

打印输入单词字符数量统计直方图-C++版

打印输入单词字符数量统计直方图-C++版

losangelx的博客 874

YOLOv8改进,MobileNetV3轻量化架构改进特征提取网络,助力涨点

MobileNetV3通过结合硬件感知网络架构搜索(NAS)和NetAdapt算法,通过新颖的架构改进进一步提升了性能。本文开始探讨了自动化搜索算法与网络设计如何协同工作,以利用互补方法来提升整体技术水平。通过这一过程,创建了两个新的MobileNet模型:MobileNetV3-Large和MobileNetV3-Small,分别针对高资源和低资源使用场景。这些模型随后被适配并应用于目标检测和语义分割任务。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3835

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C/C++高级语言程序设计课程设计

C/C++高级语言程序设计课程设计C高级语言程序设计课程设计1. 课程设计任务内容2. 问题描述与分析1. 问题描述2. 设计分析3. 算法设计与流程图4. 编码与测试5. 程序编码6. 程序测试7. 总结分析 C高级语言程序设计课程设计 1. 课程设计任务内容 分蛋糕(201703-1):小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为al , a2, … an。 小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编

qq_42108313的博客 1899

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

K&R《C程序设计语言(第2版)》习题解答项目完全解析:106个C语言练习带你从入门到精通

如果你想系统学习C语言,K&R《C程序设计语言(第2版)》习题解答项目是一份不可多得的宝藏资源。这个开源项目收录了Brian W. Kernighan与Dennis M. Ritchie合著经典教材《The C Programming Language》(即K&R)的全部课后习题答案,共106个C语言练习,覆盖8大章节,从Hello World到系统调用一应俱全。无论你是刚接触C语言的新手,还是想

gitblog_00477的博客 662

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

c++ 数组换行_C程序设计语言 练习1-13

题目:编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易,垂直方向的直方图则要困难些。步骤1:统计各个单词长度说明:此部分基本包含在教材中,没有难度。#include <stdio.h> #define MAX 20 //数组默认长度 #define IN 1 //单词内 #define OUT 0 //单词外 int main() { int i, ...

weixin_28221255的博客 375

打印输入单词字符数量统计直方图-Python版

打印输入单词字符数量统计直方图-Python版

losangelx的博客 1246

eslint-plugin-import 的 no-mutable-exports 规则:禁止可变导出绑定,强制 `const` 导出

`import/no-mutable-exports` 是 eslint-plugin-import 提供的一条校验规则,用于禁止通过 `var` 或 `let` 声明并导出(含具名导出、默认导出与重导出)可变绑定,引导开发者统一使用 `const` 导出不可变引用。本文以 [docs/rules/no-mutable-exports.md](https://link.gitcode.com/i/

gitblog_00444的博客 660

c语言输入单词长度直方图,第7周 C语言程序设计(新2版) 练习1-13 打印输入单词长度的直方图(水平与垂直)...

一、水平直方图数组问题及代码:学习/*打印输入单词长度的直方图*/#include#define MAXHIST 15 //最大直方图#define MAXWORD 11 //单词最大长度#define IN 1 //单词内#define OUT 0 //单词外int main(){int c,i,nc,state;int len;int maxvalue; //数组wl[]的...

weixin_42390234的博客 218

打印输入单词字符数量统计直方图-Java版

打印输入单词字符数量统计直方图-Java版

losangelx的博客 766

学习C语言编程必备的入门书籍

转自知乎路人甲 本篇内容将包含一些算法以及数据结构相关内容,文章中的所有推荐的书籍均来自知乎社区大牛力荐书籍、豆瓣评分较高书籍、各语言社区比较热门书籍以及京东、亚马逊、当当热销书籍的重合书籍。在接下来的文章中会涉及: 《C Primer Plus》 《C Primer Plus》详情链接 豆瓣评分(C Primer Plus (豆瓣)):9.1分 ,有62.5%的读者给出了满分评价 京东:在计算...

正在成为 code ape 1万+

c语言:计算输入字符各个字母出现的频率思路

接着上一篇的《c语言:计算输入字符个数》,这一篇来写《c语言:计算输入字符各个字母出现的频率思路》 同样也是《c语言程序设计第二版》这本书上面: 2.编写一个程序,计算输入字符各个字母出现的频率。 最终结果为: 刚刚接手题目的时候,我想得很复杂,因为26个字母中有大小写嘛,小写a~z,大写A~Z 但是,无论是大写还是小写,字母都只有26个,在此,当输入大写字母的时候,我们就将其...

weixin_33908217的博客 1078

算法-程序设计课week5-作业

A - 最大矩形 给一个直方图,求直方图中的最大矩形的面积。例如,下面这个图片中直方图的高度从左到右分别是2, 1, 4, 5, 1, 3, 3, 他们的宽都是1,其中最大的矩形是阴影部分。 Input 输入包含多组数据。每组数据用一个整数n来表示直方图中小矩形的个数,你可以假定1 <= n <= 100000. 然后接下来n个整数h1, …, hn, 满足 0 <= h...

TriAlley的博客 1084

c++自底向上算符优先分析_学习编程的推荐书籍 -【入门书籍之"C"篇】!...

学习编程道路上的入门书籍之C篇,此篇内容将包含一些算法以及数据结构相关内容,文章中的所有推荐的书籍均来自大牛力荐书籍、豆瓣评分较高书籍、各语言社区比较热门书籍以及热销书籍的重合书籍。✪ C Primer Plus支持pdf下载豆瓣评分(C Primer Plus (豆瓣)):9.1分 ,有62.5%的读者给出了满分评价京东:在计算机与互联网销量榜中排名第七位,在c语言相关书籍中排...

weixin_39688378的博客 131
上一篇: C++程序设计语言练习10.15 构造函数的调用时机
下一篇: C++程序设计语言练习10.12 C++的普通类表示
armor51
博客等级 码龄20年 9粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值