-1

typedef std::vector<std::vector<std::vector<double>>> three_d_vector;3D ベクトルを宣言するための typedef があります。しかし、可能であれば、配列のように一括リストで個々の値を宣言する方法を知りたいです。

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

Assuming you are working on C++11 and what you're asking for is a direct way to initialize your vector:

#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 }
        },
    };
}

However, please notice that defining a 3D vector this way will give you freedom to have different vector sizes for each dimension. In other words, this will be legal:

    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 }
        },
    };

Whether this is desired, acceptable or unacceptable depends on your use case; anyway, I guess you might want to have a look at Boost.MultiArray.

于 2013-01-24T15:28:59.063 に答える
0

を使用すると、std::vector<std::vector<std::vector<double>>>キャッシュの一貫性があまりなくなります。Boost.MultiArray代わりにaを使用してください。

于 2013-01-24T15:28:34.383 に答える