似乎在任何地方都找不到这个问题的答案,我如何将数组设置为数组类型的最大值?我本以为ZBUFFER是一个16位整数数组时,memset(ZBUFFER,0xFFFF,size)就可以工作了。取而代之的是,我始终得到-1。
此外,我们的想法是让这个工作尽可能快(这是一个zbuffer,需要初始化每一帧),所以如果有更好的方法(仍然一样快或更快),让我知道。
编辑:作为说明,我确实需要一个带符号的整型数组。
发布于 2013-04-11 19:58:44
在C++中,您可以使用std::fill和std::numeric_limits。
#include <algorithm>
#include <iterator>
#include <limits>
template <typename IT>
void FillWithMax( IT first, IT last )
{
typedef typename std::iterator_traits<IT>::value_type T;
T const maxval = std::numeric_limits<T>::max();
std::fill( first, last, maxval );
}
size_t const size=32;
short ZBUFFER[size];
FillWithMax( ZBUFFER, &ZBUFFER[0]+size );这将适用于任何类型。
在C中,最好不要使用设置字节值的memset。初始化char以外的其他类型的数组(ev.unsigned),您必须求助于手动for循环。
发布于 2013-04-11 19:49:08
-1 \f25 0xFFFF -1\f6和-1\f25 0xFFFF-1\f6在使用二进制补码表示的16位整数中是相同的。您只能得到-1,因为您已将数组声明为short而不是unsigned short。或者是因为您在输出时将这些值转换为有符号的。
顺便说一句,你认为可以使用memset设置除字节以外的其他东西的假设是错误的。memset(ZBUFFER, 0xFF, size)也会做同样的事情。
发布于 2013-04-11 19:59:05
在C++中,您可以使用std::fill算法为数组填充一些值。
std::fill(ZBUFFER, ZBUFFER+size, std::numeric_limits<short>::max());这比你当前的方法既不快也不慢。不过,它确实有工作的好处。
https://stackoverflow.com/questions/15947969
复制相似问题