gpt4 book ai didi

c++ - Boost 多数组的 std::vector

转载 作者:行者123 更新时间:2023-11-30 04:18:13 27 4
gpt4 key购买 nike

我是 Boost(也是 stackoverflow)的新手,想使用 vector 的多数组。我是这样做的:

typedef boost::multi_array<std::vector<Vector3_t>, 2> array_type;
array_type* mImage;
int mResolution = 1000;
mImage = new array_type (boost::extents[mResolution][mResolution]);
//works
mImage[0][0].origin()->push_back(Vector3_t());
//Error: abort()
mImage[1][1].origin()->push_back(Vector3_t());
//Error: abort()
mImage[500][440].origin()->push_back(Vector3_t());

在互联网上我只能找到使用 int、doule 等的多数组示例。是否可以在 mutliarray 中使用 std::vector ?我知道我可以使用 3d 多阵列,但我更喜欢 vector 作为元素。

最佳答案

Boost.MultiArray 支持 std::vector元素。一般来说,Boost.MultiArray 会在编译时进行概念检查。因此,如果代码使用完整类型编译,那么它应该被支持。

mImage[0][0].origin() :

  • mImage[0][0]返回对 std::vector<Vector3_t> 的引用.
  • origin()不是 std::vector<Vector3_t> 上的成员函数,导致错误。

origin()是多数组的成员函数,它返回第一个元素的存储地址。在数组未重新索引为正索引的情况下,这相当于 0对于所有索引(即 mImage.origin() == &mImage[0][0] )。


这是一个简短而完整的示例,其中包含整数 vector 的多数组。

#include <iostream>
#include <vector>

#include <boost/foreach.hpp>
#include <boost/range/counting_range.hpp>
#include <boost/multi_array.hpp>

int main()
{
typedef std::vector<int> vector3_type;
typedef boost::multi_array<std::vector<vector3_type>, 2> array_type;
array_type array(boost::extents[5][5]);

// Insert vector into multi-array.
array[0][0].push_back(vector3_type());

// Insert range of [100,105) into the first vector at [0][0]
BOOST_FOREACH(const int& i, boost::counting_range(100, 105))
array[0][0].front().push_back(i);

// Print all integers at [0][0][0]
BOOST_FOREACH(const int& i, array[0][0][0])
std::cout << i << std::endl;
}

并且运行会产生以下预期输出:

100101102103104

关于c++ - Boost 多数组的 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16541743/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com