C++ Primer第10章10.6的习题疑问,正在学习这本书帮忙看看

yixianyu 2011-08-17 04:49:44

在习题10.32里提到:
重新实现文本查询程序,使用vector容器代替set对象来存储行号。注意,由于行以升序出现,因此只有在当前行号不是vector容器对象中的最后一个元素时,才能将新行号添加到vector中。

  这个要求的背景是待查询单词在文段中出现的所有行号都要按顺序存入一维容器中。所在的课文里是使用set这个STL类型实现,因为set_object.insert函数可以在插入时自动排序。而vector和其唯一区别就是不能自动按某种顺序插入,必须自定义判断顺序与插入位置的代码。

因此,我的疑惑产生了:
注意的条件是“只有在当前行号不是vector容器对象中的最后一个元素时”,这里面包含两个意思,待插入行号在行号容器中已存在,且位置在vector容器的最末。一般自定义的判断顺序与插入位置的代码早就判断出待插入行号已在容器中,因此通常就绕开了插入操作。

拿不准原作者在这个习题上想要表达的意思,最多是担心会遗漏对set与vector两种STL库类型某些特性区别的理解。其实钻不钻这个并不影响对整个章节乃至整本书的理解,纯粹是好奇心驱使。
...全文
104 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
whdugh 2013-08-15
  • 打赏
  • 举报
回复
统计单词总的次数是不是有问题了。
linsword20 2011-11-17
  • 打赏
  • 举报
回复
晕,那统计的总共的出现次数不是不对了吗?
[Quote=引用 4 楼 linsword20 的回复:]

我想知道它那边使用set,当一个单词在同一行出现1次以上时,set只记了一次行号,那么算单词出现的总的次数时用set.size()是不是有问题啊?

引用 2 楼 szqh97 的回复:

这个很好理解的啊,就是统计一个单词所在的行号啊,如果一个单词在一行中出现了多次,只是统计一次就OK了啊,就是这个意思啊
[/Quote]
linsword20 2011-11-17
  • 打赏
  • 举报
回复
我想知道它那边使用set,当一个单词在同一行出现1次以上时,set只记了一次行号,那么算单词出现的总的次数时用set.size()是不是有问题啊?

[Quote=引用 2 楼 szqh97 的回复:]

这个很好理解的啊,就是统计一个单词所在的行号啊,如果一个单词在一行中出现了多次,只是统计一次就OK了啊,就是这个意思啊
[/Quote]
AndyZhang 2011-08-19
  • 打赏
  • 举报
回复
楼上正解
szqh97 2011-08-19
  • 打赏
  • 举报
回复
这个很好理解的啊,就是统计一个单词所在的行号啊,如果一个单词在一行中出现了多次,只是统计一次就OK了啊,就是这个意思啊
noodle123 2011-08-18
  • 打赏
  • 举报
回复
1、作者应该是想表述如果同一行中有多个待查询的单词出现的时候,只往vector中放入一次。
因为已经是升序,所以如果同一行中有两个以上待查单词出现,第一个加入后肯定为vector的最后一个元素,后面相同的几个就判断一下跳过了。
2、可能还有一层意思:set不仅会自动排序,还会在你插入相同元素的时候,自动抛弃待插入的新记录或者覆盖掉原来对应的老记录(其实结果都一样,只是过程不同),具体实现需要查看源码。。。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧