21xrx.com
2024-12-23 03:52:21 Monday
登录
文章检索 我的文章 写文章
C++必备代码精华
2023-06-22 05:36:29 深夜i     --     --
C++基础语法 数据结构与算法 模板和STL 异常处理和多线程编程 内存管理和优

C++是一门广泛应用于计算机学科、工程学科和科学研究领域的高级编程语言,具有良好的可移植性和程序强大的高效性。在日常开发过程中,程序员需要经常使用一些常用的代码模板,以提高程序的编写效率和准确性。以下是C++必备代码精华,供参考。

1.快速幂模板

快速幂算法是一种快速求幂余的算法,它可以将大指数的幂次运算通过一系列的迭代操作,转化为小幂次方的乘法运算,从而减少计算的次数和时间复杂度。以下是快速幂模板:

long long qmi(long long a, long long b, long long m)

{

  long long ans = 1 % m;

  while (b)

  {

    if (b & 1) ans = ans * a % m;

    a = a * a % m;

    b >>= 1;

  }

  return ans;

}

2.素数筛法

素数是指除了1和本身外没有其他因数的数,是数学中的基础概念。在程序设计中,经常需要使用素数筛法来生成一定范围内的素数序列,以进行后续的数论运算。以下是素数筛法模板:

const int N = 1e7 + 10;

int primes[N], cnt;

bool st[N];

void get_primes(int n)

{

  for (int i = 2; i <= n; i++)

  {

    if (!st[i]) primes[cnt++] = i;

    for (int j = 0; primes[j] * i <= n; j++)

    {

      st[primes[j] * i] = true;

      if (i % primes[j] == 0) break;

    }

  }

}

3.倍增算法

倍增算法(也称为二分思想)是一种通过将问题规模减半的思想,快速求解一系列连续的值或区间最大、最小、第k大等问题。在程序设计中,倍增算法常常被用于二分求解,离线查询等场景。以下是倍增算法的模板:

int st[N][30];

void init(int n)

{

  for (int i = 1; i <= n; i++) st[i][0] = a[i];

  for (int j = 1; j <= 30; j++)

    for (int i = 1; i + (1 << j) - 1 <= n; i++)

      st[i][j] = max(st[i][j-1], st[i+(1 << j-1)][j-1]);

}

int query(int l, int r)

{

  int k = log2(r - l + 1);

  return max(st[l][k], st[r-(1 << k)+1][k]);

}

以上是C++中常用的三种必备代码模板,它们具有广泛的适用性和实用性,可用于解决各种常见的算法问题和设计难题。当然,除了以上三种模板外,C++还有很多其他重要的代码模板,程序员们需要不断学习和掌握,才能在编程中游刃有余。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章