一些C 在演算法的使用技巧

2021-10-06 06:08:51 字數 3502 閱讀 7570

1. .#pragma gcc optimize(2)

#pragma gcc optimize(2)

//或者(o1、o3類似)

#pragma gcc optimize(「o2」)

2. #include

#include

3. #define inf 0x3f3f3f3f

#define inf 0x3f3f3f3f

4. ios::sync_with_stdio(false);

ios::

sync_with_stdio

(false

);

cin,cout要先把要輸出的東西存入緩衝區,再輸出,導致效率降低,這段語句可以來打消iostream的輸入 輸出快取,可以節省許多時間,使效率與scanf與printf相差無幾。

5. cin.tie(0); 或者cin.tie(null);

cin.

tie(0)

;//或者

cin.

tie(

null

);

6. 簡化的for迴圈

#define rep(i,a,b) for(register int i=(a);i<(b);++i)

#define ret(i,a,b) for(register int i=(a);i<=(b);++i)

簡化的for迴圈,懶人寫法,個人不推薦(不太好看、但是編寫快)。

ps: register關鍵字請求讓編譯器將變數a直接放入暫存器裡面,以提高讀取速度,在c語言中register關鍵字修飾的變數不可以被取位址,但是c++可以用 & 操作符取位址,一旦使用了取位址操作符,被定義的變數會強制存放在記憶體中。。c++中雖然支援register關鍵字,但是c++編譯器也有自己的優化方式,即某些變數不用register關鍵字進行修飾,編譯器也會將多次連續使用的變數優化放入暫存器中,如果自己指定了register變數,但是編譯內器如果發現不合理,也會自動的取消程式設計師指定的register變數。

7. 整數/浮點快速讀入

inline

intread

(void

)while

(c>=

'0'&&c<=

'9')

x=(x<<3)

+(x<<1)

+(c^48)

,c=getchar()

;return x*f;

}

8. 快速列印

template

<

class

t>

inline

void

print

(t x)

-----------------------------------分割線-----------------------------------------

以上內容來自某大佬的乙個**片段,我只是將其查詢,探尋一下作用,加深對其理解。

**片段

#pragma gcc optimize(2)

//開o2優化

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//#include

//#include

//#include

//priority_queuea;

//priority_queue,greater> b;

#define inf 0x3f3f3f3f

//memset(num,0x3f,sizeof(num));

#define bug(x) printf("[%d]\n",(x));

//#define pause system("pause");

#define me(x,y) memset(x,y,sizeof(x));

#define eps 0.0000000001

#define pi 3.1415926535897932385

//cout<#define ee 2.7182818284590452354

//printf("%.20lf",exp(1));

#define rr 0.57721566490153286060651209

//尤拉常數

#define it iterator

#define rint register int

#define rep(i,a,b) for(register int i=(a);i<(b);++i)

#define ret(i,a,b) for(register int i=(a);i<=(b);++i)

#define mp make_pair

#define pb push_back

#define fi first

#define se second

#define all(x) (x).begin(),(x).end()

#define sz(x) (int) (x).size()

typedef

long

long ll;

using

namespace std;

//inline int min(int a,int b)

inline

intread

(void

)while

(c>=

'0'&&c<=

'9')

x=(x<<3)

+(x<<1)

+(c^48)

,c=getchar()

;return x*f;

}template

<

class

t>

inline

void

print

(t x)

//int dx=;

//int dy=;

intmain()

C 一些技巧

一如果函式對傳入的指標引數進行修改,一定要把引數設定為指標的指標或者指標的引用 delete the first occurrence of the node which value equals item in a single linked list void delete node head,...

C語言演算法題的一些技巧

1.floor函式為向下取整函式。floor x 可以返回x的整數部分。如果想實現四捨五入的效果,可以用floor x 0.5 2.的表示方法。const double pi 4.0 atan 1.0 atan為反正切函式。3.想要獲取程式的執行時間,可以用clock 函式,除以clocks per...

在 Docker 中使用 mysql 的一些技巧

今天我寫一點在 docker 容器中使用 mysql 的 tips.要不要在生產環境使用 docker 執行資料庫這麼深奧的問題,等我踩足夠的坑再來寫吧。但是至少在開發和測試環境你可以用 docker 管理資料庫啊。先貼乙個我常用的 docker compose 片段,後邊進行詳細的解釋。這是日常使...