提升多阵列维度

发布于 2025-01-06 02:00:01 字数 213 浏览 0 评论 0原文

我有一个 Boost 多重数组,其尺寸是在运行时根据用户的输入设置的。

我现在想通过 x,y,z 组件迭代该数组。

如果这是一个 std::vector,我会使用:

for(int i=0;i<v.size();i++){

或者某种迭代器。

如何获取多数组维度的数值?

如何迭代多数组?

I have a Boost multiarray whose dimensions are set at run-time based on input from the user.

I'd now like to iterate over that array via x,y,z components.

If this were a std::vector, I would use:

for(int i=0;i<v.size();i++){

Or perhaps some kind of iterator.

How do I get numeric values of the multiarray's dimensions?

How do I iterate over the multiarray?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

痴意少年 2025-01-13 02:00:01

您可以使用 shape() 以一种不太复杂的方式:(

#include <iostream>
#include <string>
#include <boost/multi_array.hpp>

int main() {
    boost::multi_array<std::string, 2> a(boost::extents[3][5]);
    for(size_t x = 0; x < a.shape()[0]; x++) {
        for(size_t y = 0; y < a.shape()[1]; y++) {
            std::ostringstream sstr;
            sstr << "[" << x << ", " << y << "]";
            a[x][y] = sstr.str();
        }
    }
    for(size_t x = 0; x < a.shape()[0]; x++) {
        for(size_t y = 0; y < a.shape()[1]; y++) {
            std::cout << a[x][y] << "\n";
        }
    }
    return 0;
}

查看实际操作 关于科利鲁

You could use shape() for a less convoluted way:

#include <iostream>
#include <string>
#include <boost/multi_array.hpp>

int main() {
    boost::multi_array<std::string, 2> a(boost::extents[3][5]);
    for(size_t x = 0; x < a.shape()[0]; x++) {
        for(size_t y = 0; y < a.shape()[1]; y++) {
            std::ostringstream sstr;
            sstr << "[" << x << ", " << y << "]";
            a[x][y] = sstr.str();
        }
    }
    for(size_t x = 0; x < a.shape()[0]; x++) {
        for(size_t y = 0; y < a.shape()[1]; y++) {
            std::cout << a[x][y] << "\n";
        }
    }
    return 0;
}

(See it in action on coliru)

如日中天 2025-01-13 02:00:01
#include "boost/multi_array.hpp"
#include <iostream>
#include <algorithm>
#include <iterator>

int main () {
    typedef boost::multi_array_types::index_range range;
    typedef boost::multi_array<char, 2> Array2d;
    Array2d a(boost::extents[8][24]);

    //to view the two-dimensional array as a one-dimensional one can use multi_array_ref?
    boost::multi_array_ref<char, 1> a_ref(a.data(), boost::extents[a.num_elements()]);
    std::fill(a_ref.begin(), a_ref.end(), '-');

    //to apply algorithm to one row or column, can use array_view
    //especially useful for traversing it vertically?
    //e.g:
    Array2d::array_view<1>::type views[4] = {
        a[boost::indices[range()][0]], //left column
        a[boost::indices[range()][a[0].size() - 1]], //right column
        a[boost::indices[0][range()]], //top row
        a[boost::indices[a.size()-1][range()]] //bottom row
    };
    for (unsigned i = 0; i != sizeof(views)/sizeof(views[0]); ++i) {
        std::fill ( views[i].begin(), views[i].end(), 'X' );
    }

    //output
    for (unsigned i = 0; i != a.size(); ++i) {
        std::copy(a[i].begin(), a[i].end(), std::ostream_iterator<char>(std::cout, ""));
        std::cout << '\n';
    }
}

来源: http://cboard.cprogramming.com/cplusplus-programming/112584 -boost-multiarray.html

#include "boost/multi_array.hpp"
#include <iostream>
#include <algorithm>
#include <iterator>

int main () {
    typedef boost::multi_array_types::index_range range;
    typedef boost::multi_array<char, 2> Array2d;
    Array2d a(boost::extents[8][24]);

    //to view the two-dimensional array as a one-dimensional one can use multi_array_ref?
    boost::multi_array_ref<char, 1> a_ref(a.data(), boost::extents[a.num_elements()]);
    std::fill(a_ref.begin(), a_ref.end(), '-');

    //to apply algorithm to one row or column, can use array_view
    //especially useful for traversing it vertically?
    //e.g:
    Array2d::array_view<1>::type views[4] = {
        a[boost::indices[range()][0]], //left column
        a[boost::indices[range()][a[0].size() - 1]], //right column
        a[boost::indices[0][range()]], //top row
        a[boost::indices[a.size()-1][range()]] //bottom row
    };
    for (unsigned i = 0; i != sizeof(views)/sizeof(views[0]); ++i) {
        std::fill ( views[i].begin(), views[i].end(), 'X' );
    }

    //output
    for (unsigned i = 0; i != a.size(); ++i) {
        std::copy(a[i].begin(), a[i].end(), std::ostream_iterator<char>(std::cout, ""));
        std::cout << '\n';
    }
}

source: http://cboard.cprogramming.com/cplusplus-programming/112584-boost-multiarray.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文