这是我的代码
TaskStackBuilder
线
void execute() {
for (u32 f = 0; f < numForces; f++)
{
u32 length = end - start;
PhysicalObject* arr = objects + start;
std::vector<bool> tmp(length);
bool* tmpArr = tmp.data();
forces[f].affected(arr, length, tmpArr);
for(u32 index = 0; index < length; index++)
if (tmp[index])
forces[f].apply(arr[index]);
}
}
向我抛出错误:“无效值不应该被忽略” 我查看了文档,确定矢量的数据方法是非无效的,应该返回一个指针:> http://www.cplusplus.com/reference/vector/vector/data/
有什么想法可能会出问题吗?
重要的事情:
答案 0 :(得分:5)
答案 1 :(得分:3)
要简要引用Scott Meyers的《 有效的STL 》一书中的第18项:“避免使用vector<bool>
”。这种专业化的语义意味着它不完全符合标准中的容器要求,因为它实际上并不存储布尔值;而是使用位存储压缩的表示形式。
每当您需要访问单个“ bool
”或需要指向数据序列的指针(如您的示例)时,都会遇到麻烦,因为无法获取指向对象的指针。一位。
如上面@john所述,vector<uint8_t>
可能会为您服务。或者,如果重写函数以使用迭代器而不是指针,则可以尝试使用deque<bool>
。