• 总结一些好用的C++小技巧


    持续更新中.....

    1.输出二维数组

    你平常输出二维数组是这样的:

    for(int i = 1; i <= n; ++i) {
        for(int j = 1; j <= m; ++j)
            printf("%d ", a[i][j]);
        printf("
    ");
    }

    但是你可以这样输出:

    for(int i = 1; i <= n; ++i)
      for(int j = 1; j <= m; ++j)
        printf("%d%c", a[i][j], " "[j == m]);

    不仅方便了10倍,还很有逼格。

    2.O(n)求数列中的最大的前两个

    使用swap来做!

    for(int i = 1; i <= n; ++i) {
      int t = a[i];
      if(t > big1) swap(big1, t);
      if(t > big2) swap(big2, t); }

    极为方便。

    3.for的活用

    下面是for的活用的代码。没有用什么C++11的高级语法。

    //链式前向星
    for(int p = tu[u], v; v = to[p], p; p = nxt[p])

    //树上回溯祖先
    for(int p = u; p; p = fa[p])

    //求highbit
    for(ans = 0; x; ans++, x >>= 1);

    //求快速幂
    for(ans = 1; x; a *= a, x >>= 1)
      if(x & 1) ans *= a;

    // 枚举一个集合S的所有子集k
    for(int t = S, k = S; !t; t = k, k = (k-1 & S))

    // FFT之前的排序
    for(int i = 0, j = 0; i < len; ++i) {
      if(i < j) swap(a[i], a[j]);
      for(int k = (len >> 1); j ^= k, (j < (j ^ k)); k >>= 1);
    }

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

                                                                                           L     I     N    E

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    系统综合实践 第1次实践作业
    Linq 中按照多个值进行分组(GroupBy,Count)
    敏捷开发综述
    心率
    二维数组 子数组和的最大值
    电梯调度算法
    课堂测试用例。。。
    分析文本文件中各单词出现的频率,并把频率最高的十个词打印出来
    dwz tree组件 取得所选择的值
    SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误
  • 原文地址:https://www.cnblogs.com/lightmain-blog/p/11564406.html
Copyright © 2020-2023  润新知