-1

我有 typedeftypedef std::vector<std::vector<std::vector<double>>> three_d_vector;来声明 3D 向量;但我想知道,如果可以的话,我如何在批量列表中声明各个值,比如数组。

4

3 回答 3

2

您需要在 C++11 模式下编译(例如,使用-std=c++11gcc 的命令行开关)并使用如下语法:

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 回答