Một số cách “#define” đặc biệt trong C/C++
Đây là từ khóa tiền xử lý, dùng để định nghĩa tên một hằng hoặc kiểu gì đó…. Đối với mình thì nó giúp code "nhanh gọn" hơn nhưng những beginner cũng đừng quá lạm dụng nhé!
Chắc mình cũng không cần giải thích nhiều về “#define” nữa nên vào thẳng luôn.
Có lẽ đã quen kiểu “#define PI 3.14…..” hoặc #define một giá trị nào đấy. Và hôm nay nghỉ lễ rảnh rỗi nên viết ra bài này, sắp tới thi cử nữa nên dạo này không có nhiều thời gian. Bài này nhằm giới thiệu một số kiểu #define (define macro) khác mình hay dùng mà có thể bạn chưa gặp bao giờ =))
#define FOR(i,a,b) for (int i = a; i < b; i++)
Đây là một vòng lặp for và bạn có thể sử dụng nó đơn giản về sau bằng cú pháp: FOR(i,3,5); (chạy từ 3 -> 5) ….. hoặc FOR(i, 1, 100); (chạy từ 1->100)
#define for(i,n) for(int i=0;i<n; i++)
chạy từ 0 đến bé hơn n. dùng for(i, 5); tức sẽ cho chạy từ 0 đến <5. thay vì cứ phải code lại dài dòng, như vậy ngắn hơn phải không?
#define R1 return 1
thậm chí define cho cả giá trị trả về luôn.
#define CL(a,x) memset(x, a, sizeof(x));
nhìn hàm memset chắc cũng biết rồi nhỉ. (cần có thư viện string).
#define filein freopen("in.txt","r",stdin)
Có thể dùng cho cả thao tác mở file.(tất nhiên là đóng cũng được).
#define pr(x) printf("Case %d: ",x) in một số nguyên x bằng cú pháp pr(x);
#define sc(n) scanf("%d",&n) nhập một số nguyên n bằng cú pháp sc(n);
#define C1(x) cin >> x // gõ C1(x); có vẻ nhanh hơn cin >> x;
#define C2(x, y) cin >> x >> y // tương tự nhưng nhập 2 số
#define C3(x, y, z) cin >> x >> y >> z // nhập 3 số
nhập xuất thông thường..
#define pb push_back
push_back cũng ngắn hơn nhiều rồi.(cần có thư viện vector)
#define max(a, b) ((a) > (b) ? (a) : (b))
tìm max 2 số a và b bằng cú pháp max(a, b);
Và còn nhiều nữa……………….Nhưng để tìm max cho bất kỳ kiểu nào (int, float, double..) thì sao?
Bạn có nhớ template là gì? là một từ khóa của C++ đặc trưng cho việc tổng quát hóa việc xử lý với các kiểu dữ liệu khác nhau.(thôi tự tìm hiểu thêm nha) =))
template <class T> inline T max(T a, T b){ return a > b ? a : b;}
tìm max 2 số a và b thì chỉ cần dùng cú pháp max(a, b); là xongtemplate<class T>T sq(T a){ return (a*a); }
// tính a^2 bằng cú pháp sq(a);template<class T>T gcd(T a,T b){ return (b==0) ? a : gcd(b,a%b); }
// ước số chung lớn nhất của 2 số a, b bằng cú pháp gcd(a, b);template<class T>T lcm(T a,T b){ return (a/gcd(a,b))*b; }
// ……….nhỏ nhấttemplate<class T>T Pow(T n,T p) { T res=n; for(T i=1;i<p; i++){ res *= n; } return res; }
// chỉ là một hàm Pow thôi.template<class T>bool isPrime(T n){ for(T i=2; i*i<=n; i++){ if(n%i==0) return false; } return true; }
// kiểm tra số nguyên tố.
…………….. còn rất nhiều nữa và bạn có thể tự nghĩ ra. tham khảo thêm typedef
có thể một số không cần thiết lắm nhưng mục đích của bài này là giới thiệu cho bạn biết những “khả năng” của #define và template có thể làm được mà bạn chưa biết. HẾT