typedef std::vector<std::vector<std::vector<double>>> three_d_vector;
3D ベクトルを宣言するための typedef があります。しかし、可能であれば、配列のように一括リストで個々の値を宣言する方法を知りたいです。
3 に答える
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.} };
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.
を使用すると、std::vector<std::vector<std::vector<double>>>
キャッシュの一貫性があまりなくなります。Boost.MultiArray
代わりにaを使用してください。