我使用以下模板来获取指向数组最后一个元素之后的指针:
template <typename T, size_t n>
T* end_of(T (&array)[n])
{
return array + n;
}
我似乎记得这种方法存在一些问题,但我不记得是什么了。我认为它与类型参数或函数参数的选择有关,但我不确定。因此,只是作为一个健全性检查,你是否看到上面的代码存在任何问题?小型使用测试:
int test[] = {11, 19, 5, 17, 7, 3, 13, 2};
std::sort(test, end_of(test));
n
只会是单个T
的大小。 - Zac Howlandstd::array
模板类,从而避免完全创建end_of
函数的需要。 - Zac Howlandnew []
:typedef int array[10]; array* a = new array[1];
这基本上等同于new int array[1][10];
。尽管这表示一个在运行时动态分配的数组,但数组的大小仍必须是编译时常量,因为除了第一个维度之外new []
中的所有都必须是编译时常量。那个动态分配的数组可以传递给上面的模板作为end_of(*a)
的参数。请再次注意,我们处理的是指向数组的指针。 - David Rodríguez - dribeas