Я использую библиотеку «xtensor» для c ++. С его помощью я пытаюсь создать класс данных, содержащий пользовательские данные.
Иногда мне нужно указать некоторые данные группы пользователей в списке идентификаторов пользователей. Для этой задачи я использую систему логических флагов, чтобы отмечать пользователей, которых я хочу скопировать в новую таблицу.
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;
}
}
Но эта строка кода:
который (индекс) = истина;
присваивает «истинное» значение всем «каким» элементам массива.
Что я делаю неправильно?
std::vector<bool>
это особый случай. operator[]
возвращает ссылку std::vector<bool>::reference
а также
Любые чтения или записи в вектор, которые происходят через
std::vector<bool>::reference
потенциально читать или писать на весь
основной вектор.
Других решений пока нет …