我有 typedeftypedef std::vector<std::vector<std::vector<double>>> three_d_vector;
来声明 3D 向量;但我想知道,如果可以的话,我如何在批量列表中声明各个值,比如数组。
问问题
537 次
3 回答
2
您需要在 C++11 模式下编译(例如,使用-std=c++11
gcc 的命令行开关)并使用如下语法:
three_d_vector vec = { { {1., 2.}, {3., 4., 17., 25.} },
{ {5., 6., 12.}, {7., 8.}, {0., 22.} },
{ {9., 10.}, {11.}, {45.}, {33.}, {37., 11.} };
于 2013-01-24T15:28:36.580 回答
2
假设您正在使用 C++11 并且您要求的是初始化向量的直接方法:
#include <vector>
using namespace std;
int main()
{
typedef vector<vector<vector<double>>> three_d_vector;
three_d_vector v =
{
{
{ 1, 2, 3 }, { 4, 5, 6 }
},
{
{ 0, 0, 1 }, { 1, 0, 0 }
},
{
{ 4, 0, 1 }, { 1, 0, 5 }
},
};
}
但是,请注意,以这种方式定义 3D 矢量将使您可以自由地为每个维度设置不同的矢量大小。换句话说,这将是合法的:
three_d_vector v =
{
{
{ 1, 2, 3, 7 }, { 4, 5, 6 }
},
{
{ 0, 0, 1 }, { 1, 0, 0, 8, 9, 15 }
},
{
{ 4, 0, 1 }, { 1, 0 }
},
};
这是否需要、可接受或不可接受取决于您的用例;无论如何,我想你可能想看看Boost.MultiArray。
于 2013-01-24T15:28:59.063 回答
0
使用 astd::vector<std::vector<std::vector<double>>>
不会非常缓存连贯。改用 a Boost.MultiArray
。
于 2013-01-24T15:28:34.383 回答