我在这里有点矢量,主要是为了学术价值。它适用于8,16,32,64等。在这种情况下,底层数组是32位指针。每个单元包含32位,可以单独设置和清除。
Bitvector<unsigned long int> b(32);
我将所有位的每个32位单元填充为1。
bool setAll()
{
for (int i = 0; i < m_size; i++)
{
if (m_intSize == 32)
m_array[i] = 0xFFFFFFFF;
else if (m_intSize == 64)
m_array[i] = 0xFFFFFFFFFFFFFFFF;
else if (m_intSize == 16)
m_array[i] = 0xFFFF;
else if (m_intSize == 8)
m_array[i] = 0xFF;
else
return false;
}
return true;
}
任何人都可以猜到,32位动态数组指针不能指向64位,所以我在m_array [i] = 0xFFFFFFFFFFFFFFFF上得到了这个截断错误;
warning C4309: '=': truncation of constant value
有没有办法摆脱这种警告?是否有某种选择可以做-1 * sizeof(T)或类似?
答案 0 :(得分:2)
是的,假设无符号值,正常的方法是:
void setAll()
{
for (int i = 0; i < m_size; i++)
m_array[i] = -1;
}
C ++中的无符号整数定义为环绕,因此这将始终为您提供该平台上m_array[i]
的最大可能值。
或者您可以#include <limits>
并使用std::numeric_limits<T>::max()
,但这并不是很酷。