Linked list
Là cấu trúc dữ liệu gồm dãy các node kết nối với nhau thông qua các link (liên kết).

Product Placement
will byers stan first human second

@theartofmadeline

shark vs the universe
Jules of Nature
ojovivo
Show & Tell

izzy's playlists!
Monterey Bay Aquarium

blake kathryn

JBB: An Artblog!

❣ Chile in a Photography ❣
Not today Justin

$LAYYYTER
Cosmic Funnies
art blog(derogatory)

#extradirty
Xuebing Du

JVL
seen from Philippines
seen from Türkiye
seen from United Kingdom

seen from United States

seen from United States
seen from Spain
seen from Malaysia

seen from United States

seen from United States
seen from United States
seen from Brazil

seen from Bangladesh

seen from Malaysia
seen from Germany
seen from United States

seen from United States
seen from Spain
seen from United States
seen from United States
seen from Malaysia
@nhanthanh
Linked list
Là cấu trúc dữ liệu gồm dãy các node kết nối với nhau thông qua các link (liên kết).

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Pointer và Constant
Pointer to Constant
VD về pointer to constant:
const int *ptr;
Pointer trên:
1. Có thể trỏ đến vùng nhớ của hằng và chỉ pointer to constant mới làm được như vậy.
2. Có thể trỏ đến vùng nhớ của biến thông thường và thông qua con trỏ đó, vùng nhớ trở thành read-only. Cố gắng thay đổi bằng dereference operator sẽ gây ra lỗi compile. Ta có thể dùng để đảm bảo sự toàn vẹn cho dữ liệu của vùng nhớ mà nó trỏ đến.
Constant pointer
Là con trỏ chỉ gán được địa chỉ một lần khi khởi tạo, và không thể trỏ đi nơi khác được. VD về constant pointer:
int value1 = 5;
int value2 = 10;
int *const ptr = &value1;
ptr = &value2; //compile error
Lúc này bản thân con trỏ là hằng, còn vùng nhớ nó trỏ đến thì không phải hằng.
Constant pointer to constant
Kết hợp cả hai loại ở trên để tạo ra loại con trỏ chỉ có chức năng read-only và cũng không thể thay đổi vùng nhớ nó trỏ đến.
int value = 5;
const int *const ptr = &value;
&ptr = 10; //compile error int otherValue = 10;
ptr = &otherValue; //compile error
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
Double pointer
Pointer 1 lưu trữ địa chỉ của biến, pointer thứ 2 lưu trữ địa chỉ của pointer 1 - double pointer.
Dãy địa chỉ trên bộ nhớ ảo được chia thành nhiều phân vùng khác nhau.
Cấp phát bộ nhớ động
C++ buộc chúng ta phải cấp phát vùng nhớ ngay khi chạy chương trình (Compile-time allocation/Static memory allocation) khiến chương trình kém linh hoạt và sử dụng nhiều tài nguyên bộ nhớ. Automatic memory allocation (cấp phát bộ nhớ tự động) thì cấp phát bộ nhớ trong runtime khi đi vào các hàm (dành cho local variable và parameter) và bị thu hồi sau khi ra khỏi hàm. Kích thước vùng nhớ cấp phát cho static memory allocation và automatic memory allocation là rất giới hạn (phân vùng Stack trên bộ nhớ ảo) dễ gây nên stackoverflow.

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Pointer-Array
Pointer và Array
Trong hầu hết trường hợp ta có thể xét Array cũng giống như một pointer trỏ đến ô nhớ của phần tử đầu tiên của mảng.
int *ptr;
int arr[]
ptr = arr;
Hay có thể hiểu là ptr = &arr[0];
Vậy
ptr + 1 = &arr[1];
ptr + 2 = &arr[2];
Nhưng về cơ bản thì pointer và array không giống nhau.
Xem thêm: https://www.learncpp.com/cpp-tutorial/pointers-and-arrays/
Truyền array vào function
Một biến thông thường khi truyền vào như parameter của function sẽ pass-by-value. Có nghĩa là C++ copy giá trị của biến đó rồi đưa vào một biến cục bộ mới. Tuy nhiên array thì khác, việc copy cả array vào sẽ khiến tài nguyên bộ nhớ bị hao hụt nên sẽ được pass-by-pointer vào function - thay đổi diễn ra trong function lên array sẽ thay đổi chính array truyền vào.
Hai function dưới đây là giống nhau:
void printSize(int array[]);
void printSize(int *array);
Pointer (con trỏ)
Thông thường, biến là tên tượng trưng cho một giá trị.
Giá trị trong biến được lưu trữ trong RAM của máy tính. Tùy vào kiểu dữ liệu mà một giá trị có thể cần đến 1, 2, 4 hay 8 ô nhớ (mỗi ô nhớ tương ứng 1 byte) để lưu trữ giá trị của nó. Để truy cập dữ liệu trên RAM thì người ta cần gọi đúng địa chỉ ô nhớ đầu tiên của chuỗi n ô nhớ đang lưu trữ giá trị mà ta cần.
Pointer là tên tượng trưng cho địa chỉ của một giá trị đang lưu trữ trên RAM. Size của pointer không phụ thuộc vào kiểu dữ liệu. Thường với hệ máy 32bit thì 1 pointer chiếm 4 byte còn 64bit thì chiếm 8 byte.
int var = 10;
int *ptr = &var;
* trong khai báo chỉ để biểu thị nó là pointer.
& (address-of operator): lấy địa chỉ của biến.
* (dereference operator): lấy giá trị của ô nhớ mà pointer trỏ đến.
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
Generics function là một function có thể làm việc với tất cả các data type để trách việc lặp cùng các dòng code cho những data type khác nhau khi bản thân thuật toán không phụ thuộc vào data type (tránh overloading function cho từng data type).
Vậy ở đây khi ta truyền tham số vào cho generics function, không chỉ có giá trị của biến là parameter mà ngay cả kiểu của biến cũng là parameter (type parameterization). Kiểu của biến sẽ được truyền vào template - một kiểu dữ liệu trừu tượng tổng quát hóa cho các kiểu dữ liệu khác và được xác định khi generics function được gọi.
VD:
template <</code>typename T>
T myMax(T x, T y)
{
return (x > y) ? x : y;
}
Ngoài generics function thì ta còn có generics class. Generics class định nghĩa một class mà không phụ thuộc vào data type như LinkedList, Binary Tree, Stack, Queue, Array,...
Get the COMPLETE COURSE: http://bit.ly/2keDCna4 pillars of object-oriented programming: encapsulation, abstraction, inheritance and polymorphism. Subscribe f...
Một video dài 7 phút khá xúc tích và dễ hiểu về OOP, có đầy đủ ví dụ thực tế để ta hiểu về từng đặc tính của OOP.
Trước khi OOP xuất hiện, ta có Procedural Programming - xây dựng chương trình xoay quanh các function. Chương trình càng ngày càng giãn ra, copy&paste các function rải rác ở khắp nơi khiến cho chúng phụ thuộc nhưng không có sự liên kết khiến cho việc sửa chữa các function cực kỳ khó khăn.
Qua OOP, ta gom các functions và variables có liên quan vào một unit - Object. Từ đó, variable trở thành property, function trở thành method. Property và method của một object sẽ có sự liên kết chặt chẽ với nhau. Đó chính là tính đóng gói - Encapsulation.
Tiếp là Abstraction - tính trừu tượng thể hiện qua việc ẩn đi những function và variable không cần thiết có sự tương tác với bên ngoài để:
Giảm thiểu sự thay đổi không đáng có.
Thay đổi những thành phần đã ẩn đi không làm ảnh hưởng đến chương trình
Đơn giản hóa interface
Tính kế thừa - Inheritance cho phép ta tái sử dụng code để tránh các đoạn code lặp lại thừa thải. Ta định nghĩa các property và method trong một generic object và sau đó cho các object có chung những điểm chung với generic object đó kế thừa nó.
Mặc dù các object cùng kế thừa tới một generic object nhưng cách chúng hoạt động lại có phần khác nhau. VD một method chung là Speak() nhưng People, Cat, Dog sẽ không thể kêu tiếng giống nhau được. Từ đó ta có tính đa hình - Polymorphism, cùng chung tên gọi nhưng cách hành động khác nhau tùy vào loại object.
Tóm gọn lại: