zoukankan      html  css  js  c++  java
  • [OI

    这篇博客主要介绍如何在读入字符串时速度更快

    以及strlen.length()的区别

    以及一些小知识qwq(没错就是很杂)

    壹.如何在读入字符串速度更快

    在读入一个字符串时,一般是只能用cin读入

    1 std::string a;
    2 int main()
    3 {
    4     cin >> a;
    5 }

    想让它读的更快,就需要有一些优化(

    1 std::string a;
    2 int main()
    3 {
    4     ios::sync_with_stdio(false); 
    5     cin >> a;
    6 }

    在C++中,为了保证与C的兼容性,通常要把cout和printf一起绑定再输出流

    这样在cincout中,输出时要先进入缓冲区再输出,这样效率就会大大降低

    //从而造成了cin比不上scanf的假象

    只需要把“是否兼容stdio”开关关闭即可

    小提示:当你写了freopen后就不能再解绑了,因为解绑与重定向不能同时使用

    (血泪教训qwq

    再优化:在默认的情况下cin是和cout绑定在一起的,每次执行操作符<<的时候都要调用flush这样会增加IO(输入输出)负担。

    可以通过tie(0)(0表示NULL)来解除cincout的绑定,从而进一步加快效率

    1 std::string a;
    2 int main()
    3 {
    4     ios::sync_with_stdio(false); 
    5     cin.tie(0);
    6     cin >> a;
    7 }

    以上就是如何在读取字符串时更快一些

    贰.strlen.length()的区别

    strlen接受一个字符指针,它返回这个字符指针指向的字符串的长度

    .length()是string类的成员函数,它返回这个string的长度

     1 //输入字符串
     2 
     3 //string型
     4 std::string a;
     5 
     6 int main()
     7 {
     8     std::ios::sync_with_stdio(false);
     9     std::cin.tie(0);
    10     cin >> a;
    11     for (int i = 0; i < a.length(); i++) cout << a[i] << " ";
    12 } 
    13 
    14 //char型
    15 const int maxn = 1e5 + 7;
    16 
    17 char a[maxn];
    18 
    19 int main()
    20 {
    21     std::ios::sync_with_stdio(false);
    22     std::cin.tie(0);
    23     cin >> a;
    24     for (int i = 0; i < strlen(a); i++) cout << a[i] << " ";
    25 } 

     strlen是O(n)的,而string::.length()是O(1)的

    char*只能用strlen,而string转换成char*后也可以用strlen

     .一些小知识

    c_str()的用法:

    string::c_str()返回的是指向这个string实际数据储存位置的指针,这个位置的合法长度不可能超过这个string有史以来的最长长度

    也就是说,如果你的string曾经有过1000个字符,那么你最多就只能通过这种方式往里面输入1000个字符

     1 //LARGE是你要输入的字符串的最长的可能长度
     2 const int LARGE = 1e6;
     3 char buff[LARGE + 2];
     4 std::string a; 
     5 int main()
     6 {
     7     std::ios::sync_with_stdio(false);
     8     std::cin.tie(0);
     9     cin >> buff;
    10     a = buff;
    11     cout << a.c_str() << endl;;
    12     return 0;
    13 }

    //以下的这个小知识点我感觉...emmm可能全天下只有我不会qwq

    给出多组数据,要求输入

    例:

    7 7
    5 8
    5 2
    2 1

    有两种输入方法

    1 //第一种
    2 while (scanf("%d %d", &a, &b) != EOF)
    3 
    4 //第二种
    5 while (~scanf("%d %d", &a, &b)) 

    最后感谢MnFe对以上内容的指导

  • 相关阅读:
    istio kiali 亲和性调度
    istio kiali 内部介绍
    istio kiali 可视化bookinfo
    Istio 部署Bookinfo 应用
    初探istio kiali
    安装Istio
    Istio 是什么?
    AQS源码浅析
    go 单元测试testify
    go unknown revision报错
  • 原文地址:https://www.cnblogs.com/aiyi2000/p/9770451.html
Copyright © 2011-2022 走看看