在成员函数中未知大小的数组上迭代
Iterating Over Arrays of unknown size in member function
如何在以下定义中迭代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[],该映射使用的地址作为键,因此,只需查看缓冲区就不会获得任何关于大小的信息。
这很危险,当然不是标准中定义的
相关文章:
- 如何以优化的方式同时迭代两个间距不相等的数组
- 为什么我的 scanf() 没有在我的数组上迭代我的 for 循环?
- 迭代器库中的 std::size() 不适用于传递给函数的 C 样式数组
- 自定义 STL 兼容迭代器,用于迭代 2D 数组类的列
- 在C++中使用 for 循环的数组迭代
- 如何使用基于范围的for循环迭代Rapidjson文档(它本身就是一个JSON数组)
- 获取 c++ 中具有恒定长度的数组的迭代器
- 指针到指针 2-D 数组中的迭代
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 为自定义数组实现迭代器
- 数组迭代器不是可取消引用的错误
- 元素级多维数组迭代,与存储顺序无关
- 多维数组迭代效率
- std::不带模板的数组迭代器范围
- 在多线程代码中缓存友好的数组迭代模式
- 用1个循环解释二维数组迭代
- 可变模板形参和元组迭代
- 数组迭代器中的hasNext()方法
- 兼容STL的两个数组迭代器
- 对于循环数组迭代,if循环测试索引是否为真/假,计算结果不正确