Size_t Trong C/C++ | Think In Programming

size_t C/C++ có một kiểu dữ liệu là size_t, như đúng tên gọi của nó, dùng để lưu size của một object ở bất kì dạng dữ liệu nào. size_t dài bao nhiêu byte thì tùy thuộc vào platform, thường thì nó được map với kiểu dữ liệu có giá trị nguyên lớn nhất (đa phần là unsigned long long int). Vì là kiểu dữ liệu dùng để lưu size của object, nên ở các vòng lặp duyệt theo size của object, người ta thường hay dùng size_t làm kiểu của index. Nếu ai đã từng mò mẫm các file thư viện chuẩn thì sẽ thấy rất nhiều. Ví dụ:

vector <int> vec; for (size_t index = 0; index < vec.size(); index++) { //do something }

Lưu ý khi dùng size_t

Vì size_t thường được map với kiểu dữ liệu nguyên không dấu, nên khi thực hiện phép trừ sẽ cho ta một kết quả trái với mong đợi. Ví dụ: đoạn code dưới đây sẽ không cho ra kết quả là -1, mà ra một số khổng lồ (nếu được map với unsigned long long int thì nó sẽ ra 18446744073709551615)

#include <iostream> using namespace std; int main() { size_t a = 0; cout << a-1 << endl; return 0; }

Các hàm size() trong C++ đều trả về kiểu size_t, cho nên khi thực hiện các vòng lặp tương tự như dưới đây có khả năng sẽ bị lỗi. (nhất là trong các cuộc thi code, sẽ bị mất điểm bởi những testcase đặc biệt)

vector<int> a; for (int i = 0; i < a.size() - 1; i++) { //do something }

Nếu a không chứa phần tử nào thì vòng for này vẫn sẽ được chạy. Nên viết theo kiểu dưới đây.

vector<int> a; for (int i = 0; i + 1 < a.size(); i++) { //do something }

hoặc là phải cast a.size() về kiểu int.

Nhưng chúng ta nên hạn chế cast kiểu dữ liệu như vậy, tốt hợn hết là sử dụng đúng kiểu dữ liệu (giống như ví dụ ở đầu bài), bởi vì std::size_t khi build với x64 là 64 bits mà int vẫn là 32 bits nên sẽ có vấn đề

Nguyễn Gia/Kipalog

Share this:

  • Twitter
  • Facebook
  • More
  • Reddit
Like Loading...

Related

Author: miracleandeffort.LĐT

learn to software engineer View all posts by miracleandeffort.LĐT

Từ khóa » Size_t Là Gì Trong C