Cheat sheet C++
Cập nhật lần cuối
Hello World và cấu trúc chương trình
Chương trình bắt đầu chạy từ main, hàm này trả về một int.
| Thành phần | Code |
|---|---|
| Khai báo header | #include <iostream> |
| Điểm bắt đầu chương trình | int main() { ... } |
| In một dòng | std::cout << "Hello, World!" << std::endl; |
| Đọc dữ liệu nhập | std::cin >> x; |
| Dùng namespace std | using namespace std; |
| Trả về thành công | return 0; |
| Chú thích | // line và /* block */ |
Kiểu dữ liệu
| Kiểu | Mô tả |
|---|---|
int | Số nguyên (thường là 32 bit) |
long / long long | Số nguyên rộng hơn |
float / double | Số thực dấu phẩy động |
char | Một byte / ký tự |
bool | true hoặc false |
std::string | Chuỗi động từ <string> |
auto | Trình biên dịch tự suy ra kiểu |
std::size_t | Kiểu không dấu cho kích thước và chỉ số |
Biến và tham chiếu
Tham chiếu là tên gọi khác của biến; con trỏ lưu địa chỉ.
| Thao tác | Cú pháp |
|---|---|
| Khai báo và khởi tạo | int x = 5; |
| Khởi tạo bằng dấu ngoặc nhọn | int x{5}; |
| Hằng số | const double PI = 3.14159; |
| Hằng số lúc biên dịch | constexpr int N = 10; |
| Tham chiếu (tên gọi khác) | int &r = x; |
| Con trỏ | int *p = &x; |
| Giải tham chiếu con trỏ | *p = 10; |
| Suy luận kiểu | auto y = 3.14; |
Luồng điều khiển
| Câu lệnh | Cú pháp |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Switch | switch (n) { case 1: ...; break; default: ...; } |
| Vòng lặp while | while (i < n) { ... } |
| Vòng lặp do-while | do { ... } while (i < n); |
| Vòng lặp for | for (int i = 0; i < n; i++) { ... } |
| Vòng lặp for theo phạm vi | for (auto x : vec) { ... } |
| For theo phạm vi, lấy tham chiếu | for (auto &x : vec) { ... } |
| Break / continue | break; thoát khỏi vòng lặp, continue; chuyển sang lần lặp tiếp theo |
Hàm
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa hàm | int add(int a, int b) { return a + b; } |
| Không có giá trị trả về | void greet() { ... } |
| Đối số mặc định | int pow(int b, int e = 2) { ... } |
| Truyền tham chiếu | void inc(int &x) { x++; } |
| Tham chiếu const (không sao chép) | void print(const std::string &s) { ... } |
| Nạp chồng hàm | int max(int a, int b); và double max(double a, double b); |
| Lambda | auto f = [](int x) { return x * 2; }; |
| Lambda có capture | auto g = [n](int x) { return x + n; }; |
Lớp và OOP
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa lớp | class Dog { ... }; |
| Phạm vi truy cập | public:, private:, protected: |
| Biến thành viên | std::string name; |
| Hàm khởi tạo | Dog(std::string n) : name(n) {} |
| Hàm hủy | ~Dog() { ... } |
| Hàm thành viên | void bark() { ... } |
| Tạo đối tượng | Dog d("Rex"); |
| Kế thừa | class Puppy : public Dog { ... }; |
| Hàm ảo | virtual void speak(); |
Container STL
Các container thường dùng trong thư viện chuẩn.
| Container | Công dụng và ví dụ |
|---|---|
std::vector<int> | Mảng động: v.push_back(1); v.size(); |
std::string | Chuỗi: s += "!"; s.length(); |
std::array<int, 3> | Mảng kích thước cố định, biết rõ giới hạn |
std::map<K, V> | Cặp khóa và giá trị có sắp xếp: m["a"] = 1; |
std::unordered_map<K, V> | Bảng băm (tra cứu nhanh hơn, không có thứ tự) |
std::set<T> | Các giá trị duy nhất có sắp xếp: s.insert(5); |
std::pair<A, B> | Hai giá trị: make_pair(1, "x") |
std::queue / std::stack | Hàng đợi FIFO / ngăn xếp LIFO |
Thuật toán STL và iterator
Từ <algorithm>; phần lớn nhận một khoảng iterator begin/end.
| Thao tác | Cú pháp |
|---|---|
| Iterator đầu / cuối | v.begin(), v.end() |
| Sắp xếp | std::sort(v.begin(), v.end()); |
| Sắp xếp giảm dần | std::sort(v.begin(), v.end(), std::greater<int>()); |
| Tìm một giá trị | auto it = std::find(v.begin(), v.end(), 5); |
| Đếm số phần tử khớp | std::count(v.begin(), v.end(), 5); |
| Phần tử nhỏ nhất / lớn nhất | std::max_element(v.begin(), v.end()); |
| Tính tổng một khoảng | std::accumulate(v.begin(), v.end(), 0); |
| Biến đổi từng phần tử | std::transform(v.begin(), v.end(), v.begin(), fn); |
Smart pointer và C++ hiện đại
Nên dùng smart pointer thay cho new/delete thủ công để bộ nhớ được dọn dẹp tự động.
| Tính năng | Cú pháp |
|---|---|
| Sở hữu duy nhất | auto p = std::make_unique<Dog>("Rex"); |
| Sở hữu chung | auto p = std::make_shared<Dog>("Rex"); |
| Tham chiếu không sở hữu | std::weak_ptr<Dog> w = p; |
| Ngữ nghĩa di chuyển (move) | auto v2 = std::move(v1); |
| Nullptr | int *p = nullptr; |
| Structured binding | auto [key, val] = *it; |
| Giá trị tùy chọn | std::optional<int> maybe; |
| Template | template <typename T> T add(T a, T b) { return a + b; } |
Cú pháp C++, các container STL và tính năng hiện đại mà bạn cần nhiều nhất, gom trong một trang. Cheat sheet C++ này là bảng tra cứu nhanh khi viết C++: kiểu dữ liệu, tham chiếu, lớp, các container của thư viện chuẩn như vector và unordered_map, cùng các smart pointer thay thế cho new/delete thủ công.
Mọi thứ ở đây đều là C++ chuẩn (từ C++11 trở lên) và biên dịch được bằng g++ hoặc clang++. Sao chép phần bạn cần, hoặc chạy thử bất kỳ đoạn code nào ngay trong playground C++, không cần cài trình biên dịch. Đang học ngôn ngữ này? Khóa học C++ tương tác miễn phí của Coddy hướng dẫn bạn từng bước về con trỏ, STL và lớp.
Câu hỏi thường gặp về cheat sheet C++
Cheat sheet C++ này có miễn phí không?
Có. Cheat sheet C++ này hoàn toàn miễn phí, không cần đăng ký. Lưu trang lại và quay lại bất cứ khi nào bạn cần tra cú pháp, một container STL hay một smart pointer.
Con trỏ và tham chiếu trong C++ khác nhau thế nào?
*p. Tham chiếu (int &r = x) là tên gọi khác của một biến có sẵn: phải gắn ngay khi khai báo, không bao giờ null hay gắn lại được, và dùng y như chính biến đó. Dùng tham chiếu khi muốn truyền tham số gọn gàng hơn, và dùng con trỏ khi cần một liên kết gián tiếp có thể trống hoặc đổi được.Nên dùng new/delete hay smart pointer?
std::unique_ptr và std::shared_ptr (tạo bằng make_unique/make_shared) tự giải phóng bộ nhớ khi ra khỏi phạm vi, nhờ đó tránh được rò rỉ bộ nhớ và lỗi giải phóng hai lần thường gặp khi dùng new/delete thủ công. Chỉ dùng new/delete trực tiếp trong code cấp thấp có lý do cụ thể.Có thể luyện tập C++ online không?
Có. Mở playground C++ để biên dịch và chạy bất kỳ đoạn code nào trong cheat sheet này ngay trên trình duyệt, không cần cài trình biên dịch. Khi muốn học có lộ trình, khóa học C++ tương tác miễn phí của Coddy đưa bạn đi từng bước từ biến và vòng lặp đến lớp và STL.
Cheat sheet này có phù hợp cho người mới bắt đầu không?
Có. Nội dung được sắp xếp từ những thành phần cơ bản hay dùng nhất (kiểu dữ liệu, luồng điều khiển, hàm) đến phần nâng cao (STL và smart pointer), nên bạn có thể dùng các phần đầu ngay từ ngày đầu tiên rồi dần làm chủ phần còn lại.