21xrx.com
2025-04-04 21:32:16 Friday
文章检索 我的文章 写文章
C++语言100必背代码
2023-07-05 12:52:13 深夜i     9     0
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必背代码,希望对大家的学习有所帮助。当然,这里给出的代码只是基础,还需要自己不断地探索和学习。

  
  

评论区

请求出错了