1. Sử dụng thư viện bits/stdc++.h
- C++ có rất nhiều thư viện, để sử dụng các hàm hay cấu trúc dữ liệu ta cần phải khai báo thư viện chứa các cấu trúc dữ liệu/hàm tương ứng. Ví dụ:
#include <iostream>
#include <vector>
#include <set>
#include <string>
using namespace std;
int main(){
cout << "Hello CLAOJ!";
return 0;
}
Trong đó:
- Thư viện
iostream
được dùng cho các lệnh nhập - xuất trong C++. - Thư viện
vector
dùng cho các thao tác trên cấu trúc dữ liệu vector trong C++. - Và tương tự với các cấu trúc dữ liệu khác như
string
,set
,...
- Thư viện
Để tránh việc phải khai báo quá nhiều thư viện khi code C++, ta có thể khai báo một thư viện duy nhất là
bits/stdc++.h
. Đây là một thư viện lớn chứa tất cả các thư viện chuẩn của C++. Thư việnbits/stdc++.h
vô cùng hữu dụng vì tiết kiệm thời gian khai báo từng thư viện, đặc biệt là trong Lập trình thi đấu.
#include <bits/stdc++.h>
2. Sử dụng #define
- Khi lập trình C++, chắc hẳn sẽ có những câu lệnh bạn phải viết đi viết lại nhiều lần. Để tiết kiệm thời gian khi gọi những câu lệnh này, ta có thể sử dụng lệnh
#define
trong C++. - Ví dụ:
#include <bits/stdc++.h>
using namespace std;
int main(){
for (int i = 1; i <= 10; i++){
cout << "Hello CLAOJ!" << endl;
}
for (int i = 1; i <= 10; i++){
cout << "Happy coding!" << endl;
}
}
có thể viết gọn bằng cách sử dụng lệnh #define
như sau:
#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for (int i = (a); i <= (b); i++)
int main(){
FOR(i,1,10){
cout << "Hello CLAOJ!" << endl;
}
FOR(i,1,10){
cout << "Happy coding!" << endl;
}
}
3. Sử dụng toán tử điều kiện ?
và :
- Toán tử điều kiện
?
và:
có chức năng tương tự như cấu trúc if-else. Sử dụng các toán tử điều kiện thay cho cấu trúc if-else giúp code ngắn gọn và tiết kiệm thời gian hơn. - Ví dụ:
cout << (a > b ? a : b);
tương đương với
if (a > b) {
cout << a;
} else {
cout << b;
}
4. Sử dụng các toán tử trên bit
- Kiểm tra tính chẵn/lẻ của một số. Ví dụ:
if (num % 2 != 0){
cout << "le";
} else {
cout << "chan";
}
tương đương với
if (num & 1){
cout << "le";
} else {
cout << "chan";
}
- Nhân/chia cho 2 bằng phép dịch bit. Ví dụ:
int m = x >> 1; // tương đương với int m = x/2;
int n = x << 1; // tương đương với int n = x*2;
5. Sử dụng từ khóa auto
- Từ khóa
auto
có thể được sử dụng như một kiểu dữ liệu. Ví dụ:
int a = 21;
long long b = 12345678901234567890;
char c = 'c';
double d = 3.14;
string s = "CLAOJ";
có thể được khai báo như sau:
auto a = 21;
auto b = 12345678901234567890;
auto c = 'c';
auto d = 3.14;
auto s = "CLAOJ";
Lưu ý: Từ khóa auto
chỉ dùng được cho phiên bản C++11 trở đi.
6. Viết tắt vòng lặp khi duyệt qua tất cả các phần tử trong mảng/vector
- Thông thường, khi cần duyệt qua tất cả các phần tử trong mảng/vector, ta thường sử dụng vòng lặp for. Vòng lặp này có thể viết gọn hơn, ví dụ:
for (int i = 0; i < v.size(); i++){
cout << v[i] << ' ';
}
Cách viết trên tương đương với
for (int i : v){
cout << i << ' ';
}
Để thay đổi và can thiệp vào giá trị của mảng/vector ta kết hợp dùng con trỏ
for (int &i : v){
i++;
}
Khi này các giá trị trong mảng sẽ được tăng lên một đơn vị
7. Sử dụng &&
và ||
thay cho từ khóa and
và or
- Các từ khóa
and
vàor
thường sử dụng trong cấu trúc if-else có thể thay thế bằng&&
và||
. Ví dụ:
if (a == true && b == true) // tương đương với if (a == true and b == true)
cout << "true";
if (a == false || b == false) // tương đương với if (a == false or b == false)
cout << "false";
8. Sử dụng lệnh exit(0)
để thoát khỏi chương trình
- Lệnh
exit(0)
cho phép bạn thoát chương trình bất cứ khi nào bạn gọi hàm này. Ví dụ:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n = 10;
if (n == 10){
cout << "Exit";
exit(0);
}
cout << "End";
return 0;
}
Output:
Exit
- Trong đoạn code trên, chương trình chỉ thực hiện các câu lệnh từ đầu đến
exit(0)
, sau đó thoát khỏi chương trình. Các câu lệnh sauexit(0)
sẽ không được thực thi.
9. Sử dụng ,
- Trong lập trình C++, ta có thể sử dụng dấu
,
để viết các câu lệnh liên tiếp nhau mà không cần xuống dòng hay dùng dấu;
ở cuối lệnh. Ví dụ:
#include <bits/stdc++.h>
using namespace std;
int main(){
int x;
for (int i = 1; i <= 10; ++i)
cin >> x, cout << x << '\n';
return 0;
}
Đoạn code trên tương đương với
#include <bits/stdc++.h>
using namespace std;
int main(){
int x;
for (int i = 1; i <= 10; ++i){
cin >> x;
cout << x << '\n';
}
return 0;
}
10. Viết hàm (chương trình con) không cần truyền biến tham số
- Trong Lập trình thi đấu, việc viết hàm/chương trình con là một việc quen thuộc, đặc biệt là trong kỹ thuật Đệ quy, việc viết và gọi các hàm này là bắt buộc.
- Với những hàm đệ quy có sẵn giá trị bắt đầu, ta có thể truyền thẳng giá trị đó vào hàm.
- Ví dụ: Ta có hàm đệ quy:
void Try(int k){
// your code
...
}
Thay vì gọi hàm đệ quy trong chương trình chính là
int main(){
// your code
Try(0);
...
}
Ta có thể truyền giá trị bắt đầu bằng $0$ vào hàm đệ quy như sau:
void Try(int k = 0){
// your code
...
}
Khi đó, trong chương trình chính bạn chỉ cần gọi hàm đệ quy như sau:
int main(){
// your code
Try();
...
}
Cảm ơn các bạn đã đọc. Hi vọng bài viết này hữu ích với các bạn!
Happy coding, CLAOJ.
Comments