在成员函数中未知大小的数组上迭代

Iterating Over Arrays of unknown size in member function

本文关键字:数组 迭代 成员 函数 未知      更新时间:2023-10-16

如何在以下定义中迭代x和y(而不将其更改为向量)。

class MinimumSquareEasy
{
public:
   long minArea(int[] x, int[] y)
   {
     //ITERATION 
    }
};

int x[]作为参数与int * x是一样的——您有一个指针,它不会传递任何关于您可能传入的数组长度的信息。因此,您不能将其作为数组进行迭代,因为您没有信息来决定何时停止迭代。

您需要为每个数组获取一个额外的参数来指定数组的长度,或者使用一个单独传递长度的标准容器。

或者,您可以要求输入数组以某个sentinel值终止。例如,如果这个sentinel值是-1,那么你可以使用这个构造同时在两个数组上循环,当它达到中的一个数组中的sentinel时,它将停止迭代,这意味着你将迭代两个数组中最小的数组中的元素数:

for (; *x != -1 && *y != -1; ++x, ++y) {
    // Use *x and *y
}

然而,这种方法在很大程度上是C的风格,而不是C++。应该非常不鼓励在新代码中使用它。

在某些实现中,分配器可能会在实际缓冲区之前添加已分配缓冲区的大小
这有时用于delete[]运算符,以了解要释放的字节数
SOME编译器添加一个大小为的sizeof(int)变量。

但是这只是一个实现特性,不能保证存在
可以重载新的[]和删除[]运算符
或者编译器可以使用内部映射来实现new[]和delete[],该映射使用的地址作为键,因此,只需查看缓冲区就不会获得任何关于大小的信息。

这很危险,当然不是标准中定义的