Menu
CoddyTech

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ầnCode
Khai báo header#include <iostream>
Điểm bắt đầu chương trìnhint main() { ... }
In một dòngstd::cout << "Hello, World!" << std::endl;
Đọc dữ liệu nhậpstd::cin >> x;
Dùng namespace stdusing namespace std;
Trả về thành côngreturn 0;
Chú thích// line và /* block */

Kiểu dữ liệu

KiểuMô tả
intSố nguyên (thường là 32 bit)
long / long longSố nguyên rộng hơn
float / doubleSố thực dấu phẩy động
charMột byte / ký tự
booltrue hoặc false
std::stringChuỗi động từ <string>
autoTrình biên dịch tự suy ra kiểu
std::size_tKiể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ácCú pháp
Khai báo và khởi tạoint x = 5;
Khởi tạo bằng dấu ngoặc nhọnint x{5};
Hằng sốconst double PI = 3.14159;
Hằng số lúc biên dịchconstexpr 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ểuauto y = 3.14;

Luồng điều khiển

Câu lệnhCú pháp
If / elseif (x > 0) { ... } else { ... }
Switchswitch (n) { case 1: ...; break; default: ...; }
Vòng lặp whilewhile (i < n) { ... }
Vòng lặp do-whiledo { ... } while (i < n);
Vòng lặp forfor (int i = 0; i < n; i++) { ... }
Vòng lặp for theo phạm vifor (auto x : vec) { ... }
For theo phạm vi, lấy tham chiếufor (auto &x : vec) { ... }
Break / continuebreak; thoát khỏi vòng lặp, continue; chuyển sang lần lặp tiếp theo

Hàm

Thao tácCú pháp
Định nghĩa hàmint add(int a, int b) { return a + b; }
Không có giá trị trả vềvoid greet() { ... }
Đối số mặc địnhint pow(int b, int e = 2) { ... }
Truyền tham chiếuvoid inc(int &x) { x++; }
Tham chiếu const (không sao chép)void print(const std::string &s) { ... }
Nạp chồng hàmint max(int a, int b); và double max(double a, double b);
Lambdaauto f = [](int x) { return x * 2; };
Lambda có captureauto g = [n](int x) { return x + n; };

Lớp và OOP

Thao tácCú pháp
Định nghĩa lớpclass Dog { ... };
Phạm vi truy cậppublic:, private:, protected:
Biến thành viênstd::string name;
Hàm khởi tạoDog(std::string n) : name(n) {}
Hàm hủy~Dog() { ... }
Hàm thành viênvoid bark() { ... }
Tạo đối tượngDog d("Rex");
Kế thừaclass Puppy : public Dog { ... };
Hàm ảovirtual void speak();

Container STL

Các container thường dùng trong thư viện chuẩn.

ContainerCông dụng và ví dụ
std::vector<int>Mảng động: v.push_back(1); v.size();
std::stringChuỗ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::stackHà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ácCú pháp
Iterator đầu / cuốiv.begin(), v.end()
Sắp xếpstd::sort(v.begin(), v.end());
Sắp xếp giảm dầnstd::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ớpstd::count(v.begin(), v.end(), 5);
Phần tử nhỏ nhất / lớn nhấtstd::max_element(v.begin(), v.end());
Tính tổng một khoảngstd::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ăngCú pháp
Sở hữu duy nhấtauto p = std::make_unique<Dog>("Rex");
Sở hữu chungauto p = std::make_shared<Dog>("Rex");
Tham chiếu không sở hữustd::weak_ptr<Dog> w = p;
Ngữ nghĩa di chuyển (move)auto v2 = std::move(v1);
Nullptrint *p = nullptr;
Structured bindingauto [key, val] = *it;
Giá trị tùy chọnstd::optional<int> maybe;
Templatetemplate <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?
Con trỏ là một biến lưu địa chỉ; nó có thể là null, có thể gán lại để trỏ sang chỗ khác, và bạn giải tham chiếu nó bằng *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?
Nên dùng 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.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học C++ cùng Coddy

Bắt đầu