使用大小和值初始化 3D std::vector
initialize 3D std::vector with size and value
我在声明尺寸为 200×200×200 的 3D std::vector 时遇到了一些困难。我可以在 SO 上看到关于设置大小并用一个值初始化它的问题,但都是针对一维向量的。
我试着从类似
的东西开始
vector<vector<vector<uchar>>> vsfl(200,200,200,1);
但是有编译错误。
我最初使用 uchar vsfl[200][200][200] 开始,但导致堆栈溢出错误
非常感谢!
它和一维向量是一样的,但是你必须稍微改变一下参数:
vector<vector<vector<int>>> vsfl(200, vector<vector<int>>(200, vector<int>(200, 1)));
因为 std::vector
构造函数将 T
作为第二个参数,它是一个 3D 向量,所以如果你想初始化它,你必须调用 T
s 构造函数。
回到你开始的地方,但是把声明移到函数外面,你就不会得到堆栈溢出错误。堆栈的内存太多了。
如果您正在编写的代码是在一个方法中,那么将它移到函数之外会导致对象变大——如果您在函数内部声明该对象,您也会遇到同样的问题。那时,您可以将对象声明移到函数外,或新建它。
另一种选择,如果您需要,可以是:
struct BigArray { int elems[200][200][200]; };
//be sure to delete me!
BigArray *test = new BigArray;
首先,select您想使用什么容器。如果 每个 容器的大小在编译时是已知的,就像你的情况一样,并且它永远不会改变,那么使用普通的旧数组。
否则,你需要一个向量。在算法上,你想要的是用 200 个向量初始化一个向量,用 200 个向量初始化 200 个 uchar
s,无论 uchar
是什么。
因此,为了做到这一点,您可以使用...
template<typename T>
using unidimensional_vector = std::vector<T>;
template<typename T>
using bidimensional_vector = std::vector<unidimensional_vector<T>>;
template<typename T>
using tridimensional_vector = std::vector<bidimensional_vector<T>>;
tridimensional_vector<uchar> my_vector(200, bidimensional_vector<uchar>(200, unidimensional_vector<uchar>()));
我在声明尺寸为 200×200×200 的 3D std::vector 时遇到了一些困难。我可以在 SO 上看到关于设置大小并用一个值初始化它的问题,但都是针对一维向量的。
我试着从类似
的东西开始vector<vector<vector<uchar>>> vsfl(200,200,200,1);
但是有编译错误。
我最初使用 uchar vsfl[200][200][200] 开始,但导致堆栈溢出错误
非常感谢!
它和一维向量是一样的,但是你必须稍微改变一下参数:
vector<vector<vector<int>>> vsfl(200, vector<vector<int>>(200, vector<int>(200, 1)));
因为 std::vector
构造函数将 T
作为第二个参数,它是一个 3D 向量,所以如果你想初始化它,你必须调用 T
s 构造函数。
回到你开始的地方,但是把声明移到函数外面,你就不会得到堆栈溢出错误。堆栈的内存太多了。
如果您正在编写的代码是在一个方法中,那么将它移到函数之外会导致对象变大——如果您在函数内部声明该对象,您也会遇到同样的问题。那时,您可以将对象声明移到函数外,或新建它。
另一种选择,如果您需要,可以是:
struct BigArray { int elems[200][200][200]; };
//be sure to delete me!
BigArray *test = new BigArray;
首先,select您想使用什么容器。如果 每个 容器的大小在编译时是已知的,就像你的情况一样,并且它永远不会改变,那么使用普通的旧数组。
否则,你需要一个向量。在算法上,你想要的是用 200 个向量初始化一个向量,用 200 个向量初始化 200 个 uchar
s,无论 uchar
是什么。
因此,为了做到这一点,您可以使用...
template<typename T>
using unidimensional_vector = std::vector<T>;
template<typename T>
using bidimensional_vector = std::vector<unidimensional_vector<T>>;
template<typename T>
using tridimensional_vector = std::vector<bidimensional_vector<T>>;
tridimensional_vector<uchar> my_vector(200, bidimensional_vector<uchar>(200, unidimensional_vector<uchar>()));