在 xarray 中按索引赋值会分配整个数组
Assigning value by index in xarray assignes whole array
我使用 "xtensor" C++ 库。在它的帮助下,我尝试创建一个包含用户数据的数据table class。
有时我需要通过用户 ID 列表对一些用户组数据进行子集化。对于此任务,我使用布尔标志系统来标记我要复制到新 table.
的用户
class UserDataTable {
private:
xt::xarray<bool> which;
//... more code
}
UserDataTable::UserDataTable(int size){
//... more code
std::vector<std::size_t> shape(size, 1);
std::vector<bool> boolinit(size);
which = xt::adapt(binit, shape);
//... more code
}
子集函数中有这段代码:
for(int usercounter=0; usercounter<USER_LIST_COUNT; usercounter++){
std::string id = userlist(usercounter);
if(indexMap.count(id)>0){
int index = indexMap[id];
which(index) = true;
}
}
但是这行代码:
哪个(索引)=真;
将 "true" 值分配给所有 "which" 数组元素。
我做错了什么?
std::vector<bool>
is a special case. operator[]
returns reference std::vector<bool>::reference
和
Any reads or writes to a vector that happen via a
std::vector<bool>::reference
potentially read or write to the entire
underlying vector.
我使用 "xtensor" C++ 库。在它的帮助下,我尝试创建一个包含用户数据的数据table class。 有时我需要通过用户 ID 列表对一些用户组数据进行子集化。对于此任务,我使用布尔标志系统来标记我要复制到新 table.
的用户class UserDataTable {
private:
xt::xarray<bool> which;
//... more code
}
UserDataTable::UserDataTable(int size){
//... more code
std::vector<std::size_t> shape(size, 1);
std::vector<bool> boolinit(size);
which = xt::adapt(binit, shape);
//... more code
}
子集函数中有这段代码:
for(int usercounter=0; usercounter<USER_LIST_COUNT; usercounter++){
std::string id = userlist(usercounter);
if(indexMap.count(id)>0){
int index = indexMap[id];
which(index) = true;
}
}
但是这行代码: 哪个(索引)=真; 将 "true" 值分配给所有 "which" 数组元素。 我做错了什么?
std::vector<bool>
is a special case. operator[]
returns reference std::vector<bool>::reference
和
Any reads or writes to a vector that happen via a
std::vector<bool>::reference
potentially read or write to the entire underlying vector.