首页 > 编程语言 >算法小笔记0328

算法小笔记0328

时间:2024-03-28 11:22:20浏览次数:22  
标签:cout 队列 绑定 cin 笔记 0328 算法 C++ tie

1

ios::sync_with_stdio(0);

ios::sync_with_stdio(false); 是 C++ 中用于关闭 C++ 输入输出流(iostream)与 C 输入输出库(stdio)同步的语句。默认情况下,C++ 的流库与 C 的stdio库是同步的,这意味着你可以混用 cin, coutscanf, printf 等而不会出现问题。但是这种同步会导致性能下降,因为每个流库的操作都需要检查stdio库的状态。
当你设置 std::ios_base::sync_with_stdio(false); 时,你告诉 C++ 不必再与stdio库同步。这将提高输入输出操作的效率,特别是当你在程序中使用大量的 I/O 操作时。但是,这样做之后你就不能再保证 cin, cout 和 C 的 scanf, printf 混用时的正确性了。通常,在竞赛编程或者需要高性能 I/O 的场合,程序员会关闭同步,并使用 cin.tie(0); 进一步提高性能,因为这样可以解除 cincout 之间的绑定,使得 cincout 可以独立地、不按顺序地缓冲它们的 I/O 操作。
使用这个语句的典型场景是在程序的开头:这样做之后,你应该只使用 cincout 或者只使用 scanfprintf,避免混用,以防止未定义行为。

2

cin.tie(0); cout.tie(0);

在 C++ 中,cin.tie()cout.tie() 是与流对象的绑定相关的函数。默认情况下,cincout 是绑定的,这意味着当 cincout 同时用于输入和输出时,它们会保证输出的顺序与输入的顺序一致。这种绑定是为了让输出与输入保持同步,比如在交互式程序中,你希望在读取输入之前先看到所有的输出。
cin.tie(nullptr)cin.tie(0) 的作用是取消 cincout 之间的绑定。这样,cin 的输入缓冲区和 cout 的输出缓冲区就可以独立地运作,不再需要等待对方。这通常可以提高 I/O 效率,特别是在进行大量 I/O 操作时。
同样地,cout.tie(nullptr)cout.tie(0) 也可以用来取消 cout 的当前绑定。但是,通常你不需要这样做,因为 cout 默认就是与 cin 绑定的,而且取消 cin 的绑定通常也就意味着 cout 的绑定也被取消了。

3

priority_queue<int,vector<int>,greater<int>> h[100010]; //为每一家店创造一个优先队列(小顶对)

在 C++ 中,priority_queue<int, vector<int>, greater<int>> h[100010]; 声明了一个包含 100010 个优先队列的数组 h。每个优先队列都是使用 int 作为元素类型,vector<int> 作为底层容器,greater<int> 作为比较器的。
priority_queue 是 C++ 标准库中的一个容器适配器,它提供常数时间内的最大元素提取操作,即每次调用 pop 时移除的是队列中最大的元素,每次调用 top 时访问的是队列中最大的元素。默认情况下,priority_queue 是一个大顶堆,但是在这个声明中,通过使用 greater<int> 作为比较器,它被转换为一个一个小顶堆,即每次移除和访问的是队列中最小的元素。
vector<int> 是用于存储优先队列元素的底层容器,而 greater<int> 是一个函数对象,它定义了元素之间的比较方式。在这个例子中,greater<int> 会使得优先队列按照升序排列,即最小的元素在顶部。
这个声明的数组大小为 100010,这意味着你可以使用 h[0]h[100009] 来访问数组中的每个优先队列。这在处理一些需要多个优先队列的问题时非常有用,例如在图论中的 Dijkstra 算法或者在某些数据结构中的多路归并问题。

标签:cout,队列,绑定,cin,笔记,0328,算法,C++,tie
From: https://www.cnblogs.com/rexaron/p/18101167

相关文章

  • 二叉树的算法实现
       实例:     ......
  • openGauss DeepSQL_库内AI算法
    DeepSQL:库内AI算法可获得性本特性自openGauss1.1.0版本开始引入。特性简介数据库DeepSQL特性实现DB4AI功能,即在数据库内实现AI算法,以更好的支撑大数据的快速分析和计算。这里提供了一整套基于SQL的机器学习、数据挖掘以及统计学的算法,用户可以直接使用SQL进行机器学习工作。De......
  • On Java8读书笔记
    ObjectsEveryWhere使用Reference掌控对象掌控一个对象有两种不同的方式:直接掌控变量本身or间接掌控一个"通道",通过"通道"可以掌控对象在Java中,我们通过间接的方式掌控对象,而这个"通道"就是ReferenceReference不同于对象本身,对象本身往往是"臃肿的"(对象内包括字段和......
  • 算法打卡day28|贪心算法篇02|Leetcode 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.
    算法题Leetcode122.买卖股票的最佳时机II题目链接:122.买卖股票的最佳时机II 大佬视频讲解:买卖股票的最佳时机II视频讲解 个人思路因为只有一只股票,且两天作一个交易单元,那每次只收集正利润就可以最终最多可以获取的利润,可以用贪心。解法贪心法从下图可以发......
  • SDC可伸缩的高维约束基准和算法
    可伸缩的高维约束基准和算法​ 在过去二十年里,进化约束多目标优化受到了广泛的关注和研究,并且已经提出了一些基准测试约束多目标进化算法(CMOEAs)。特别地,约束函数与目标函数值有紧密的联系,这使得约束特征太单调并且与真实世界的问题不同。因此,之前的CMOEAs不能特别好的解决现实......
  • 常用排序算法
    本博客将讲述常见的几种排序算法在日常码代码时,常常会用到排序,排序算法又有很多,每种排序都会有自己的特点和适用情况,我在这将总结几种排序算法,废话少说,开始!冒泡排序(bubblesort)冒泡排序,因像水泡一样一个接一个地冒出水面(排序),而得名。冒泡排序的思想是每次将最大的一次一次......
  • 高斯混合模型(GMM)和EM算法 —— python实现
    一、EM算法EM算法是一种迭代算法,用于含有隐含变量的概率模型参数的极大似然估计。设Y为观测随机变量的数据,Z为隐藏的随机变量数据,Y和Z一起称为完全数据。观测数据的似然函数为:模型参数θ的极大似然估计为:这个问题只有通过迭代求解,下面给出EM算法的迭代求解过程:step1、选择......
  • 基于HarmonyOS的阅读笔记助手的APP开发第一天
    1.设计原型书籍界面原型书籍阅读界面原型笔记界面原型笔记记录界面原型软件设置界面原型......
  • opensips的dispatcher模块笔记
    操作系统:CentOS7.6_x64opensips版本:2.4.9dispatcher模块模块实现了基于目的地址的调度功能,可用作无状态负载均衡,但不能保证均匀分配。今天整理下CentOS7环境下opensips2.4.9的dispatcher模块使用示例,并提供运行效果视频。我将从以下几方面进行展开:模块数据库说明模块参......
  • Floyd算法 【多源最短路】模板
    B3647【模板】Floyd-洛谷|计算机科学教育新生态(luogu.com.cn)#include<bits/stdc++.h>usingnamespacestd;constintN=1e2+10;constintinf=0x3f3f3f;intn,m;intg[N][N];voidfloyd(){for(intk=1;k<=n;k++){for(inti=1;i<=n;i++)......