誰かが配列のベクトルを扱う正しい方法を教えてもらえますか?
配列のベクトル(vector<float[4]>
)しかし、error: conversion from 'int' to non-scalar type 'float [4]' requested
resize
itを試みたとき。何が悪いのでしょうか?
配列をvector
またはその他のコンテナに格納することはできません。コンテナに格納される要素のタイプ(コンテナのvalue typeと呼ばれる)は、コピー可能かつ割り当て可能でなければなりません。配列もそうではありません。
ただし、Boost、TR1、C++ 0xで提供されるようなarray
クラステンプレートを使用できます。
std::vector<std::array<double, 4> >
(std::array
with std::tr1::array
C++ TR1に含まれているテンプレートを使用する場合、またはboost::array
を使用して Boostライブラリのテンプレート 。または、独自に作成することもできます。とても簡単です。)
つかいます:
vector<vector<float>> vecArray; //both dimensions are open!
次のコードにはエラーはありません。
float arr[4];
arr[0] = 6.28;
arr[1] = 2.50;
arr[2] = 9.73;
arr[3] = 4.364;
std::vector<float*> vec = std::vector<float*>();
vec.Push_back(arr);
float* ptr = vec.front();
for (int i = 0; i < 3; i++)
printf("%g\n", ptr[i]);
出力は:
6.28
2.5
9.73
4.364
結論:
std::vector<double*>
とは別の可能性です
std::vector<std::array<double, 4>>
ジェームズ・マクネリスが示唆した。
ベクターのすべての要素はfloat[4]
であるため、サイズを変更するときはすべての要素をfloat[4]
からデフォルトで初期化する必要があります。 0
のようなint
値で初期化しようとしたと思いますか?
試してください:
static float zeros[4] = {0.0, 0.0, 0.0, 0.0};
myvector.resize(newsize, zeros);