从c到c++到ACM(从0开始学竞赛)

 7.25总结

1.关闭流同步优化的办法

2.#define int long long  和  signed main()

3. 取不同容器长度.length() 或 .size 的选择

1.关闭流同步优化的办法

方法:

在用cin或cout输入,输出前加以下代码:

 ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr); 

ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); 

 原因:

1.cin会把要输出的东西先存入缓冲区,进而消耗时间。通过关闭同步,可以有效提高cin效率;

 2.在默认情况下,C++的输入输出流(cin、cout等)与C语言的输入输出流(scanf、printf等)是同步的。关闭同步可以提高输入输出操作的效率,特别是在处理大量数据时。

同步的含义

  • 数据同步:当使用cin读取数据时,这些数据也会反映在stdin中。反之亦然,如果从stdin读取了数据,那么cin也会相应地更新其内部状态。

  • 缓冲同步cinstdin共享同一个缓冲区。这意味着,当你从cin读取数据时,实际上是从缓冲区中读取的,而这个缓冲区同样会被stdin使用。

同步的影响

  • 效率问题:由于cinstdin共享缓冲区,因此在某些情况下,使用cin进行输入可能会比直接从stdin读取数据更慢。这是因为cin在读取数据时会进行额外的处理,如类型转换、错误检查等。

  • 一致性问题:如果在一个程序中同时使用cinscanf(或类似的C语言函数)进行输入,可能会导致不一致的状态。例如,如果先用cin读取一个整数,再用scanf读取一个字符串,可能会遇到未预料的缓冲区内。

 代码的解释:

  1. ios::sync_with_stdio(false);

    这行代码的作用是关闭标准输入输出流的同步。在默认情况下,C++的输入输出流(cin、cout等)与C语言的输入输出流(scanf、printf等)是同步的。关闭同步可以提高输入输出操作的效率,特别是在处理大量数据时。
  2. cin.tie(nullptr);

    这行代码将cin的同步输出流设置为nullptr。这意味着cin的输入操作将不再与任何输出流同步,从而进一步提高输入输出的效率。
  3. cout.tie(nullptr);

    这行代码将cout的同步输入流设置为nullptr。这通常不是必须的,因为通常不需要将输出流与输入流同步,但这样做可以确保没有任何意外的同步行为。

2.#define int long long  和  signed main()

这两段代码是我今天在写完题,(https://ac.nowcoder.com/acm/contest/86034/D)看别人的题解看到的,刚看到时有点懵,所以上网查了很多,但还是一知半解,最后不知道为什么突然顿悟了(太低能了,突突突)

#define int long long简单来说就是一个宏定义:在定义后,以后代码中的 int 就相当于long long int ,如果你的代码中的整形数据大多数比较大,为了省力,你就可以用到这个东西了。

在 C++ 中,#define 是预处理指令,用于定义宏。当你看到 #define int long long 这样的代码时,它实际上是在预处理阶段将所有的 int 关键字替换为 long long

至于为什么要把int main()改成signed main():

这是因为首先在 C++ 中,int main()signed main() 是等价的,其次是因为main 函数必须返回一个 int 值,但是int又被宏定义成了long long,他已经不是原来的他了,所以不能使用 int main()

那怎么办呢?通常使用 signed main,因为 signed 等效替代于 signed int,也就是有符号整型,这与 int 别无二致,并且不会导致奇怪的 CE。

当你不确定过程中会不会爆 int 的时候,可以这么写。

3.取不同容器长度.length() 或 .size 的选择

使用 .length() 或 .size 的选择主要取决于你正在使用的容器类型。对于字符串,你通常会使用 .length(),而对于其他容器,你会使用 .size。

然而,值得注意的是,从 C++11 开始,std::string 也提供了 .size() 成员函数,作为 .length() 的替代。这意味着在 C++11 及以后的版本中,你可以使用 .size() 来获取 std::string 的长度,这使得 std::string 的使用与其他 STL 容器更加一致。

结果:用.size就行。

现在是北京时间23:38,今天还是有许多感慨的,第一次写博客,第一次如此正式的使用c++来做题,还是有太多的见识不足,总是看一段代码,查一段代码,但是不急,如此长,何必忧,如此多,何必急,岁月不长,还没挽过佳人,还没见识过世界中光怪陆离,怎能错过,怎么能够满足。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值