在C++中,size_t通常北定义为unsigned long,常被建议用来表示容器的容量或位置。但是要注意,在很多情况下,表示容量或位置,也往往需要有符号整数,例如-1。下面举两个常见的例子。
二分法查找
int search(const int A[], size_t start, size_t end, const int v)
{
if (end < start)
return -1;
int m = start + (end - start) / 2;
if (A[m] == v)
return m;
else if (A[m] > v)
return search(A, start, m - 1, v); //m == 0时,size_t溢出。
else
return search(A, m + 1, end, v);
}
注意,上述程序m = 0时,m - 1为负数,超出了size_t的表示范围,程序会出错。
快速排序
void sort(int A[NUM_ITEMS], size_t start, size_t end)
{
if (end - start < 1)
return;
int left = start, right = end;
int key = A[left];
while (left < right)
{
while (left < right && A[right] >= key)
right--;
A[left] = A[right];
while (left < right && A[left] <= key)
left++;
A[ri

文章讨论了在C++中,size_t虽然常用于表示容器容量或位置,但处理边界情况如二分法查找和快速排序可能导致溢出,因为size_t是非负整型。作者强调了在编程时要考虑负数边界条件,避免无脑使用size_t。

2733

被折叠的 条评论
为什么被折叠?



