我有typedef typedef std::vector<std::vector<std::vector<double>>> three_d_vector;
来声明3D矢量;但我想知道,如果可以的话,我是如何在批量列表中声明各个值,如数组。
答案 0 :(得分:2)
您需要在C ++ 11模式下编译(例如,对gcc使用命令行开关-std=c++11
)并使用如下语法:
three_d_vector vec = { { {1., 2.}, {3., 4., 17., 25.} },
{ {5., 6., 12.}, {7., 8.}, {0., 22.} },
{ {9., 10.}, {11.}, {45.}, {33.}, {37., 11.} };
答案 1 :(得分: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。
答案 2 :(得分:0)
使用std::vector<std::vector<std::vector<double>>>
将不会非常缓存一致。请改用Boost.MultiArray
。