【问题标题】:Assigning value by index in xarray assignes whole array在 xarray 中按索引分配值分配整个数组
【发布时间】:2018-08-02 09:08:51
【问题描述】:

我使用 C++ 的“xtensor”库。在它的帮助下,我尝试创建一个包含用户数据的数据表类。 有时我需要通过用户 ID 列表对一些用户组数据进行子集化。对于这个任务,我使用布尔标志系统来标记我想要复制到新表的用户。

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”数组元素。 我做错了什么?

【问题讨论】:

    标签: c++ xtensor


    【解决方案1】:

    std::vector&lt;bool&gt; 是一个特例。 operator[] 返回引用 std::vector&lt;bool&gt;::reference

    通过 std::vector&lt;bool&gt;::reference 可能读取或写入整个 基础向量。

    【讨论】:

    • 太棒了。似乎将 xt::xarray 更改为 xt::xarray 可以解决我的问题谢谢。
    • @MadKoala 比“谢谢”更好,您可以(应该?)通过单击其分数下方的复选标记来接受此答案。
    • @Killzone 请注意,从 C++17 开始,[vector.bool]/4 并非如此。我不知道 cppreference 是错误的还是过时的。可能是 xtensor 的 bug;这不是std::vector&lt;bool&gt; 引入的第一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2013-12-13
    • 2020-02-05
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多