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
也会相应地更新其内部状态。 -
缓冲同步:
cin
和stdin
共享同一个缓冲区。这意味着,当你从cin
读取数据时,实际上是从缓冲区中读取的,而这个缓冲区同样会被stdin
使用。
同步的影响
-
效率问题:由于
cin
和stdin
共享缓冲区,因此在某些情况下,使用cin
进行输入可能会比直接从stdin
读取数据更慢。这是因为cin
在读取数据时会进行额外的处理,如类型转换、错误检查等。 -
一致性问题:如果在一个程序中同时使用
cin
和scanf
(或类似的C语言函数)进行输入,可能会导致不一致的状态。例如,如果先用cin
读取一个整数,再用scanf
读取一个字符串,可能会遇到未预料的缓冲区内。
代码的解释:
-
这行代码的作用是关闭标准输入输出流的同步。在默认情况下,C++的输入输出流(cin、cout等)与C语言的输入输出流(scanf、printf等)是同步的。关闭同步可以提高输入输出操作的效率,特别是在处理大量数据时。ios::sync_with_stdio(false);
: -
这行代码将cin.tie(nullptr);
:cin
的同步输出流设置为nullptr
。这意味着cin
的输入操作将不再与任何输出流同步,从而进一步提高输入输出的效率。 -
这行代码将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++来做题,还是有太多的见识不足,总是看一段代码,查一段代码,但是不急,如此长,何必忧,如此多,何必急,岁月不长,还没挽过佳人,还没见识过世界中光怪陆离,怎能错过,怎么能够满足。