【问题标题】:Unexpected delay while returning a string返回字符串时出现意外延迟
【发布时间】:2012-12-05 05:13:37
【问题描述】:

从函数返回字符串时会有延迟吗?

背景信息: 我做了一个简单的程序,输入字母并输出这些字母的任何字谜。它从包含数千个单词的非常大的文本文件中检查单词。它基本上将每个单词放入一个向量中并检查它是否是字母的变位词,如果是则将其打印出来。它通常在 1-15 秒内完成,我很满意。

当我尝试将其转换为一个返回作为字谜的字符串的函数时,出现了问题。即使它仍然以相同的速度“cout”这个词,但在这之后大约需要 20 秒才能真正返回字符串和 cout。

为什么实际返回一个字符串比输出它要花这么长时间,我该如何解决?

如有必要,我可以发布我的代码;

编辑: 我将项目作为 zip 文件上传,因为它有 15 个文件。

http://www.mediafire.com/?c2gizpgcweg3iy4

为看到我的代码中的车祸而感到震惊。

【问题讨论】:

  • 请贴出代码。没有代码就很难解决问题......
  • 可能很多东西超出了范围,销毁需要一些时间?
  • 您是否在编译时进行了优化?这可以对标准库算法、容器和字符串产生巨大影响。
  • 有没有办法简化代码,把它简化为一个最小的例子,可以用来重现问题?
  • 我不太确定怎么做,因为当我只使用一个简短的单词列表来检查时,我不会遇到同样的问题。

标签: c++ function return delay


【解决方案1】:

如果我要这样做,我想我会使用multimap<string, string>map<string, std::vector<string> >(两者大致相同)。

我会先阅读单词列表。当我阅读每个单词时,我会创建一个副本并对该副本中的字母进行排序。然后我将排序/原始对插入到 [multi]map 中,排序后的版本作为键。

当我需要查找单词的字谜时,我会对该单词进行排序,在地图中查找排序版本,并获取与该排序版本匹配的所有原始单词。之后,您几乎可以对它们做任何您想做的事情。

就大小和速度而言,我希望一个文件有 39 行,并且能够以每秒约 3000 个字的速度读取输入并打印出匹配的字谜(如果您喜欢看以不同的方式计算大约每秒 15 KB 的输入)。当然,这个估计(?)是基于我 6 岁的机器。使用较新的计算机,您应该可以做得更好。

由于在输入过程中加载了所有单词,因此如果您返回单词而不是将其打印出来,我不认为这会减慢到任何可察觉的程度(事实上,如果您不这样做,我希望它会有所加快。根本不打印结果)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多