【问题标题】:how to get specific elements from a const boost::multi_array如何从 const boost::multi_array 中获取特定元素
【发布时间】:2024-01-21 22:26:01
【问题描述】:

我想知道如何从 const boost::multi_array 对象中读取元素。 事实上,据我所知,我不能使用运算符 [],因为它也用于赋值。

我有一个 3-D 维度数组。那么当 myArray 为 const 时,如何获取元素 myArray[i][j][k]

提前致谢。

【问题讨论】:

    标签: c++ boost multidimensional-array boost-multi-array


    【解决方案1】:

    作为juanchopanza's 答案的替代方案,您还可以通过从 boost::array 构建的索引数组访问元素。

    typedef boost::multi_array<double,3>::index tIndex;
    typedef boost::array<tIndex, 3> tIndexArray;
    
    tIndexArray index = {{ 1,2,3 }};
    const double x = myArray( index );
    

    会给你元素myArray[1][2][3]。如果您正在编写与维度无关的代码,这种表示法可能比显式使用 [] 运算符更有用。

    【讨论】:

      【解决方案2】:

      您可以通过值或常量引用来读取它们。假设您的数组包含 T 类型的元素:

      T x = myArray[1][2][3];
      const T& y = myArray[1][2][3];
      

      如果你想要一个指向multi_array的元素的指针,那么指针需要是const:

      const T* y = &myArray[1][2][3];
      

      【讨论】:

      • 事实上,我正在尝试将元素添加到 stl 向量中,但在使用 [] 运算符时出现编译错误。错误:初始化“void std::vector<_tp _alloc>::push_back(const _Tp&) [with _Tp = ] 的参数 1”
      • @user1287983 您能否添加向量声明、myArray 声明以及您尝试填充向量的行?
      • vector my_vector
        const boost::multi_array * my_array
        my_vector.push_back(& (*my_array)[i][j][ k])
      • @user1287983 在这种情况下你需要 std::vector.
      • @tuxworker 我很高兴它有帮助。如果您发现答案有用,您可以投票。这也适用于您接受的答案。