如何在以下定义中迭代x和y(不将其更改为向量)。
class MinimumSquareEasy
{
public:
long minArea(int[] x, int[] y)
{
//ITERATION
}
};
答案 0 :(得分:1)
int x[]
作为参数与int * x
是一样的 - 你有一个指针,它不会传达任何关于你可能传入的数组长度的信息。所以你不能迭代它作为一个数组,因为你没有信息来决定何时停止迭代。
您需要为每个指定数组长度的数组提供一个额外的参数,或者使用一个自己传达长度的标准容器。
或者,您可以要求输入数组以某个sentinel值终止。例如,如果此sentinel值为-1,那么您可以使用此构造一次遍历两个数组,当它到达 数组中的sentinel值时将停止迭代,这意味着您将迭代两个数组中最小的元素数量:
for (; *x != -1 && *y != -1; ++x, ++y) {
// Use *x and *y
}
然而,这种方法非常符合C而不是C ++的风格。应该非常劝阻它在新代码中的使用。
答案 1 :(得分:0)
在某些实现中,分配器 MAY 在实际缓冲区之前添加分配缓冲区的大小。
这有时用于delete []运算符以了解要释放多少字节
有些编译器会添加一个sizeof(int)
变量,其大小为。
但是这只是一项实施功能,并不保证存在 一个人可能会重载new []和delete []运算符 或者编译器可以使用内部映射实现new []和delete [],该映射使用地址作为键,因此只需查看缓冲区就不会有任何关于大小的信息。
这很危险,当然也不是标准中定义的内容。