使用 std::ios::sync_with_stdio(false) 可以比 scanf 和 printf 更快吗?

2023-12-02

我只知道使用 cin 和 cout 会比 scanf 和 printf 慢。然而,最佳答案说使用 std::ios::sync_with_stdio(false) 可以比 scanf&printf 更快。然而我做了这个实验,发现不对。是我的错吗?为什么?

什么是使用 cin&cout 比 scanf&printf 更快(包括读取文件)的正确代码。谢谢。

这是我的代码:

生成数据

#include<cstdio>
#include<iostream>
#include<ctime>
#include<fstream>
#include<iomanip>
FILE *data = freopen("test.in","w",stdin);
//FILE *fi = freopen("test.in","r",stdin);
//FILE *fo = freopen("test.out","w",stdout);
int main()
{
    for(int i=1;i<10000000;i++)
        printf("%d\n",i);
    return 0;
}

使用 scanf printf

#include<cstdio>
#include<iostream>
#include<ctime>
#include<fstream>
#include<iomanip>
//FILE *data = freopen("test.in","w",stdin);
FILE *fi = freopen("test.in","r",stdin);
FILE *fo = freopen("test.out","w",stdout);
int main()
{
    int ans = 1;
    while(~scanf("%d",&ans))
    {
        printf("%d\n",ans);
    }
    return 0;
}

使用 cin 和 cout ( std::ios::sync_with_stdio(true) )

#include<cstdio>
#include<iostream>
#include<ctime>
#include<fstream>
#include<iomanip>
//FILE *data = freopen("test.in","w",stdin);
FILE *fi = freopen("test.in","r",stdin);
FILE *fo = freopen("test.out","w",stdout);
int main()
{
    std::ios::sync_with_stdio(true);
    int ans = 1;
    while(std::cin>>ans)
    {
        std::cout<<ans<<std::endl;
    }
    return 0;
}

使用 std::ios::sync_with_stdio(false)

#include<cstdio>
#include<iostream>
#include<ctime>
#include<fstream>
#include<iomanip>
//FILE *data = freopen("test.in","w",stdin);
FILE *fi = freopen("test.in","r",stdin);
FILE *fo = freopen("test.out","w",stdout);
int main()
{
    std::ios::sync_with_stdio(false);
    int ans = 1;
    while(std::cin>>ans)
    {
        std::cout<<ans<<std::endl;
    }
    return 0;
}

Result:

scanf version:                           4.918 seconds
iostream version:                        51.266 seconds
iostream with sync_with_stdio(false):    31.815 seconds

你脸红了std::cout每一次,与std::endl.

不要那样做。相反,只需输出一个'\n'如果你想匹配的行为printf版本:

std::cout << ans << '\n';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 std::ios::sync_with_stdio(false) 可以比 scanf 和 printf 更快吗? 的相关文章

随机推荐

  • 使用php剪切flv视频

    我正在尝试提供 30 秒优质视频的预览 用户必须付费才能完整观看 所以我想在上传这些视频时创建一个30秒的视频文件 我如下使用 ffmpeg 但它不起作用 ffmpeg ss 00 00 00 0 t 00 00 30 0 i input
  • 子父事务回滚

    我有一个场景 我必须处理多个 sQL文件 每个文件包含 3 4 个插入或更新查询 现在当文件中的任何查询失败时我会这样做rollback整个事务意味着我们将回滚整个文件 并且在提交该文件之前执行的所有其他文件将被提交 我想要一个选项 用户可
  • 将缺失/非缺失值更改为二进制 (0/1)

    我的数据集是 df data frame x c 1 4 6 NA 7 NA 9 10 4 NA y c 10 12 NA NA 14 18 20 15 12 17 z c 225 198 NA NA NA 130 NA 200 NA 99
  • CMake 生成 makefile 的速度很慢

    当我运行 CMake 来构建忒伊亚图书馆使用 CMake 生成 makefile 非常慢 轻松需要 1 2 分钟 该项目本身有很多源文件 但我想知道是否有一种方法可以加快 makefile 的生成速度 有任何想法吗 None
  • 如何在没有控制台/本机应用程序交互式登录屏幕的情况下为 Graph API 生成 Azure Active Directory (AAD) 身份验证令牌?

    如何在没有控制台 本机应用程序交互式登录屏幕的情况下为 Graph API 生成 Azure Active Directory AAD 身份验证令牌 细节 我正在使用 Graph API 通过具有 委派 权限的 Azure Active D
  • R 中两个日期之间的总和/计数

    我有一个包含两列的数据框 一列是开始日期 另一列是结束日期 我需要获取一个包含两列的新数据框 一个是 日期 列 另一列是第一个数据框中的观察值计数 其中日期位于 开始 和 结束 之间 Have dates lt data frame Sta
  • Kendo ui 选择器 CSS 问题

    我正在使用 kendo ui 下拉列表和其他一些选择器 我想设置所选项目背景颜色的样式 我尝试过 k dropdown k state selected background color red 但所选项目的颜色没有改变 它仅设置为默认橙色
  • 使用 Application Insights 检测 Windows 服务

    是否可以使用 Application Insights 检测本地运行的 Windows 服务 没有必要像 Web 应用程序那样自动收集应用程序的指标 将自定义事件推送到 Azure 就足够了 我会让文档对此更加清楚 如果有一个核心 SDK
  • 我如何在android中设置自定义日期

    如何将日期设置为当年 25 12 12 月 例如 我正在使用这个代码 public static Calendar defaultCalendar Calendar currentDate Calendar getInstance curr
  • 以编程方式声明任意等级的数组

    在 C 中 数组分为三种类型 一维数组 锯齿形数组和多维矩形数组 问题是 给定一个特定大小的数组 我们如何创建一个具有相同维度和秩的新数组 对于多维矩形数组 似乎没有语法可以在运行时定义大小和等级 维数 C 在索引器中声明带有逗号的多维数组
  • 合并两个数组,同时保留原始数组顺序

    我正在编写一个从外部源 Twitter 请求数据的应用程序 该数据按时间顺序作为有序数组返回 外部阵列 项目 A 最新 Item B Item C 项目 D 最旧的 我将这些项目添加到另一个保留相同顺序的数组中 My array 项目 A
  • Thread.Abort 和替代方案

    这更多是出于个人好奇 兴趣 而不是我试图解决的特定问题 假设您有一个程序正在对用户提供的信息 例如搜索字符串 执行某些操作 这些信息会随着用户键入而更改 假设您想要向用户显示与他们在任何给定时间键入的内容最相关的信息 如果线程确实可以中止
  • PHP 中内爆二维数组

    我有一个像这样的数组 Array 0 gt Array 0 gt a 1 gt b 1 gt Array 0 gt c 2 gt Array 0 gt d 1 gt e 2 gt f 我想将数组转换为如下所示的字符串 arrtostr a
  • Spring Boot 项目设置设计决策

    我们将使用 Spring Boot 来创建服务 我们最初的想法是每个服务 不一定是微服务 都是独立的 并部署为 jar 文件 用于构建的 Maven 我想知道什么是一个好的 Spring Boot 项目结构 因为每个服务都是独立的 但我猜测
  • MS Exchange 服务器的 Grails 邮件插件配置

    我可以使用我的 gmail 帐户从我的 grails 应用程序发送电子邮件 但是当我使用 MS Exchange 服务器帐户时 我收到此错误 Message Mail server connection failed nested exce
  • 如果再次调用函数,则取消超时/计时器 --- debounce 函数

    我想创建一个启动超时的函数 但如果在计时器结束之前再次调用该函数 请取消原始调用并再次启动计时器 我想我可以这样做 function setTimer setTimeout gt do something 3000 但这不起作用 每次我运行
  • Ruby Regex 用于捕获两个字符串之间的所有内容(包括)

    我正在尝试清理一些 HTML 并仅删除一个标签 我真的很想避免使用 nokogiri 等 所以我出现了以下字符串 我想删除它 div class lt div gt m这有效 但它也会匹配并包括任何进一步的 div 文档中的标签 这是我不想
  • PySpark:如何转置数据框中的多列

    我是 Spark 新手 需要帮助将以下输入数据帧转换为所需的输出df 行到列 使用 PySpark 或 Spark Sql 输入数据框 A B C D 1 2 3 4 10 11 12 13 所需的输出 转置 数据 A 1 B 2 C 3
  • 为什么我看到的线程数比我在“ps”列表中创建的线程数多了一个?

    当我创建一个线程时 pthread create 从我的主进程中 我看到三 3 个线程ps上市了 这是为什么呢 也就是说 我看到主线程的进程 一个用于创建的线程 第三个用于其他线程 还有什么东西 一切工作正常 我只是想知道额外列出的过程是什
  • 使用 std::ios::sync_with_stdio(false) 可以比 scanf 和 printf 更快吗?

    我只知道使用 cin 和 cout 会比 scanf 和 printf 慢 然而 最佳答案说使用 std ios sync with stdio false 可以比 scanf printf 更快 然而我做了这个实验 发现不对 是我的错吗