21xrx.com
2024-11-25 01:10:26 Monday
登录
文章检索 我的文章 写文章
C++语言100必背代码
2023-07-05 12:52:13 深夜i     --     --
C++ 必背 代码

作为一名C++程序员,在掌握基础语法后,必须学会掌握一些常用的代码模板和技巧,下面是C++语言100个必背代码,帮助大家快速入门。

1.快速输入输出


#include<bits/stdc++.h>

using namespace std;

int main(){

  ios::sync_with_stdio(false); // 关闭同步流

  cin.tie(0); //解除 cin 与 cout 的绑定,加快输入输出效率

  cout.tie(0);

  return 0;

}

2.数组初始化


int a[100] = {0}; // 数组初始化为0

int b[100] = 1; // 前3个元素为1,2,3,其余为0

3.字符串输入输出


string str;

getline(cin,str); // getline读取整行字符串(包括空格和tab)

cout<<str<<endl;

4.快速读取数组


int a[100];

for(int i=0;i<100;i++){

  cin>>a[i];

}

5.字符串转数字


string str = "123";

int num = stoi(str); // str 转 int

long long num2 = stoll(str); // str 转 long long

double num3 = stod(str); // str 转 double

6.数字转字符串


int num=123;

string str=to_string(num);

// 结果为"123"

7.数组排序


int a[100];

sort(a,a+100); // 从小到大排序

sort(a,a+100,greater<int>()); // 从大到小排序

8.求最大值最小值


int a[100];

int maxn = *max_element(a,a+100); // 求数组中的最大值

int minn = *min_element(a,a+100); // 求数组中的最小值

9.二分查找


int a[100]=4;

int len = sizeof(a)/sizeof(*a);

int find_num = 4;

int pos1 = lower_bound(a,a+len,find_num)-a; // 第一次出现位置

int pos2 = upper_bound(a,a+len,find_num)-a; // 第一次大于该数的位置

// lower_bound返回[first, last)中的迭代器i,指向数组中第一个不小于val的元素

// upper_bound返回[first, last)中的迭代器i,指向数组中第一个大于val的元素

10.模板函数


template<typename T>

void swap(T &a,T &b)

  T t=a;

  a=b;

  b=t;

int main(){

  int x=1,y=2;

  swap(x,y);

  cout<<x<<' '<<y<<endl;

  

  double a=1.5,b=2.7;

  swap(a,b);

  cout<<a<<' '<<b<<endl;

  return 0;

}

11.快速幂


long long quick_pow(long long a,long long b,long long p){

  long long ans=1%p;

  while(b!=0){

    if(b%2==1){

      ans=(ans*a)%p;

    }

    b/=2;

    a=(a*a)%p;

  }

  return ans;

}

12.递归求阶乘


int factorial(int n){

  if(n==0)

    return 1;

  else{

    return n*factorial(n-1);

  }

}

13.非递归求阶乘


int factorial(int n){

  int res=1;

  for(int i=1;i<=n;i++){

    res*=i;

  }

  return res;

}

14.递归求斐波那契数列


int fibonacci(int n){

  if(n==0 || n==1)

    return n;

  else{

    return fibonacci(n-1)+fibonacci(n-2);

  }

}

15.非递归求斐波那契数列


int fibonacci(int n){

  if(n==0 || n==1)

    return n;

  

  int f1=0,f2=1,f3=1;

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

    f3=f1+f2;

    f1=f2;

    f2=f3;

  }

  return f3;

}

16.递归求最大公约数


int gcd(int a,int b){

  if(b==0)

    return a;

  else{

    return gcd(b,a%b);

  }

}

17.非递归求最大公约数


int gcd(int a,int b){

  while(b)

    int r=a%b;

    a=b;

    b=r;

  

  return a;

}

18.素数筛法


bool prime[1000]; // 1-999中的素数数组

void is_prime(int n)

{

  memset(prime,true,sizeof(prime));

  prime[0]=prime[1]=false; // 0、1为合数

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

    if(prime[i]){

      for(int j=i*i;j<=n;j+=i){

        prime[j]=false;

      }

    }

  }

}

19.最长公共子序列


int dp[1000][1000]; // dp数组

// str1和str2分别为两个字符串

int lcs(string str1,string str2){

  int m=str1.size(),n=str2.size();

  for(int i=1;i<=m;i++){

    for(int j=1;j<=n;j++){

      if(str1[i-1]==str2[j-1]){

        dp[i][j] = dp[i-1][j-1]+1;

      }else{

        dp[i][j]=max(dp[i][j-1],dp[i-1][j]);

      }

    }

  }

  return dp[m][n];

}

20.最长上升子序列


int dp[1000]; // dp数组

int LIS(int a[],int n){

  for(int i=0;i<n;i++){

    dp[i]=1;

    for(int j=0;j<i;j++){

      if(a[j]<a[i]){

        dp[i]=max(dp[i],dp[j]+1);

      }

    }

  }

  return *max_element(dp,dp+n);

}

以上是C++语言100必背代码,希望对大家的学习有所帮助。当然,这里给出的代码只是基础,还需要自己不断地探索和学习。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复