输入巨大字符串的最快方式
Fastest way to input huge strings?
我必须从stdin
中读取大量字符串,因此时间是一个关键问题。字符串在连续的行上,没有空格,所以我可以简单地使用while(cin>>str) { //code }
,但这非常慢。我听说scanf比cin快得多,但如果我使用scanf("%s,str)
,我认为str被视为char*
,而不是C++string
,所以我不能使用STL。我可以将输入作为char*,并将所有字符复制到C++字符串中,但IMO也会很慢。
有没有一种方法可以使用scanf或其他东西获得输入,但结果仍然是获得C++字符串?
如果您知道文本的平均或最大大小,则可以创建具有预先分配的大小的std::string
。占用大量时间的一个区域是std::string
的存储器(重新)分配。
cin >> str
是STL中最接近scanf("%s, str")
的东西。scanf
比cin
快的唯一原因是,它会给你一个char*
而不是一个字符串,虽然你可以通过将它们传递给string()
构造函数来从char*
创建一个新字符串,但这几乎与使用cin >> str
相同。
您可以使用getline:
for (std::string line; getline(std::cin, line); ) {
do_something_with(line);
}
我不知道它是否比cin >> line
快,但它可能快,因为它不需要处理换行以外的空白。但我认为这并不像哨兵建设的开销那么重要。
相关文章:
- 如何在c++中为模板函数实例创建快捷方式
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- 在linux上调试巨大的C++项目
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 创建引用向量的优雅方式
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 不同/较旧的处理器运行c++代码的方式是否不同
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 重载方法的方式会在使用临时调用时生成编译器错误
- 在reactor中存储eventHandlers的最佳方式是什么
- 如何以优化的方式同时迭代两个间距不相等的数组
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 为什么C++有不同的变量初始化方式?
- 在AVX通道中混洗的最佳方式
- 如何重新定义MPI_FLOAT,MPI_DOUBLE以 typedef 的方式
- 输入巨大字符串的最快方式