C/C++, size_t
TIL
500
White

Nguyễn Gia viết ngày 11/05/2016

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.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Nguyễn Gia

6 bài viết.
42 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
18 2
Intro Trong các coding contest, khi mà kết quả là một số rất lớn (n hoặc tổ hợp), không dùng kiểu dữ liệu primitive để lưu được thì đề bài thường ...
Nguyễn Gia viết 1 năm trước
18 2
White
16 12
Cảm xúc khi học javascript y hệt như bài viết này nên mình dịch lại cho vui. Link gốc: https://hackernoon.com/howitfeelstolearnjavascriptin2016d3a7...
Nguyễn Gia viết 1 năm trước
16 12
White
12 1
Thi thoảng la liếm github hay gặp một số từ viết tắt mà chẳng hiểu nghĩa là gì nên tổng hợp vào đây. | Từ viết tắt | Nghĩa | | |::| |AFAICT|As far...
Nguyễn Gia viết 1 năm trước
12 1
Bài viết liên quan
White
18 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết hơn 1 năm trước
18 1
White
1 1
Chào mọi người, hôm nay mình viết một bài TIL nhỏ về cách lấy độ phân giải của màn hình hiện tại đang sử dụng. xdpyinfo | grep dimensions Kết quả...
namtx viết 7 tháng trước
1 1
White
8 0
Lấy fake path của file trong html input Ngữ cảnh: em cần làm một cái nút tải ảnh lên có preview. GIải pháp đầu: Dùng (Link) đọc file ảnh thành ba...
Hoàng Duy viết gần 2 năm trước
8 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
6 bài viết.
42 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!