21xrx.com
2025-04-27 15:40:26 Sunday
文章检索 我的文章 写文章
C++编程模板
2023-07-07 08:54:44 深夜i     8     0
C++程序设计模板 C++模板编程 C++类模板 C++函数模板 C++元编程模板

C++是一种高效、灵活、可靠的编程语言,被广泛应用于各种平台和领域之中。在实际的编程工作当中,我们通常会面临着各种各样的问题,需要使用一些模板来解决这些问题。

以下是一些常用的C++编程模板:

1.快速幂模板:

long long pow_mod(long long a,long long n,long long mod)
{
  long long ans=1;
  while(n)
  {
    if(n&1) ans=(ans*a)%mod;
    a=(a*a)%mod;
    n>>=1;
  }
  return ans;
}

2.最小生成树:

int ans=0;
int union_p[maxn];
int find(int x)
{
  return x==union_p[x]?x:union_p[x]=find(union_p[x]);
}
void kruskal()
{
  for(int i=1; i<=n; i++)
  {
    union_p[i]=i;
  }
  sort(e+1,e+m+1);
  for(int i=1; i<=m; i++)
  {
    int x=e[i].u,y=e[i].v;
    int fx=find(x),fy=find(y);
    if(fx==fy) continue;
    union_p[fx]=fy;
    ans+=e[i].w;
  }
}

3.最短路:

struct node
{
  int f,g,x;
  bool operator<(node a) const
  
    return f>a.f;
  
};
priority_queue<node> Q;
int dis[maxn];
void dijkstra(int s)
{
  memset(dis,127,sizeof(dis));
  dis[s]=0;
  Q.push((node) 0);
  while(!Q.empty())
  {
    int x=Q.top().x;
    int fx=Q.top().f;
    int gx=Q.top().g;
    Q.pop();
    if(fx!=dis[x]||gx>k) continue;
    for(int i=head[x]; ~i; i=edge[i].next)
    {
      int y=edge[i].v;
      if(dis[y]>dis[x]+edge[i].w)
      {
        dis[y]=dis[x]+edge[i].w;
        Q.push((node) {dis[y],gx+1,y});
      }
    }
  }
}

4.二分答案:

bool check(int x)
  return true//判断条件
int solve()
{
  int l=1,r=1000000000;
  while(l<r)
  {
    int mid=l+((r-l)>>1);
    if(check(mid))
    
      r=mid;
     else
    {
      l=mid+1;
    }
  }
  return l; //最终结果
}

5.并查集:

int union_p[maxn];
int size[maxn]; //size记录集合大小
int find(int x)
{
  return x==union_p[x]?x:union_p[x]=find(union_p[x]);
}
void merge(int x,int y)
{
  int fx=find(x),fy=find(y);
  if(fx!=fy)
  {
    if(size[fx]<size[fy]) swap(fx,fy);
    size[fx]+=size[fy];
    union_p[fy]=fx;
  }
}

以上是一些常用的C++编程模板,它们在实际的编程中都有着很重要的应用价值。如果你对C++编程感兴趣,希望能够在编程方面取得更好的成果,不妨深入学习这些模板,相信一定能帮助你更好地解决问题。

  
  

评论区