【问题标题】:C++. Fastest way of reading line of symbols into char array/vectorC++。将符号行读入字符数组/向量的最快方法
【发布时间】:2015-02-10 12:14:41
【问题描述】:

从控制台输入读取一行字符到字符向量或数组的最快方法是什么(我更喜欢向量,因为行可能很长而且我不熟悉动态数组,所以普通数组可能会导致堆栈溢出)。我不知道我的字符行的大小,并且在字符(在另一行)之后有一些数字。我使用了字符串,但我的程序超出了我试图解决的问题的时间限制,因此我认为这可能是因为 char[] 在某些操作中比字符串快。我需要对我的行进行排序,并且我已经在使用 quickSort 算法。

【问题讨论】:

  • 除了使用std::getline,然后使用迭代器将字符串复制到向量中(为什么不将其保留为字符串?),您可以将std::copystd::istreambuf_iteratorstd::back_inserter一起使用。
  • 您确定std::string 是瓶颈吗?我怀疑问题可能出在其他地方。
  • 好吧,我希望将它从字符串更改为数组/向量,因为正如我所提到的,我的程序超出了时间限制,我认为我的程序中没有其他需要更改的地方(因为我是已经在使用 quickSort),除非像“不要对已经排序的地方进行排序”,但我想先尝试将字符串更改为 char[]。
  • 你怎么知道瓶颈来自于此,而不是你为解决问题而编写的算法?
  • @Raizekas,您应该分析您的程序,而不是盲目地将代码片段更改为其他内容。

标签: c++ arrays string vector char


【解决方案1】:

我建议从std::getline 开始。它易于使用且难以误用。

一旦你掌握了它,你就可以对它进行基准测试,看看你是否可以做得更快。

提示:重用您读到的std::string - 这样可以避免在每一行上分配内存。

【讨论】:

  • 但是我不需要知道我的行的长度吗?
  • 不,std::getline 为您调整缓冲区大小。它是 C++,而不是 C。
【解决方案2】:

您需要对一行中的字符进行排序吗?如果是,您可以使用固定大小的数组并通过在单独的计数器中计算每个字符来消除排序和分配开销?

“cbacbc”-> [1,2,3]->“abbccc”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 2014-03-20
    • 2016-08-28
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    相关资源
    最近更新 更多