誰かが配列のベクトルを操作する正しい方法を教えてもらえますか?
vector<float[4]>
配列のベクトル( )を宣言しましたが、それerror: conversion from 'int' to non-scalar type 'float [4]' requested
を試みたときに取得しましresize
た。何が問題になっていますか?
vector
配列をまたは他のコンテナに格納することはできません。コンテナに格納される要素のタイプ(コンテナの値型と呼ばれる)は、コピー構成可能であり、割り当て可能である必要があります。配列はどちらでもありません。
array
ただし、 Boost、TR1、C++0xで提供されているようなクラステンプレートを使用することはできます。
std::vector<std::array<double, 4> >
(に置き換えstd::array
てstd::tr1::array
、C ++ TR1に含まれているテンプレートを使用するか、Boostライブラリのテンプレートboost::array
を使用することをお勧めします。または、独自に作成することもできます。非常に簡単です。)
使用する:
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]
。int
私はあなたが次のような値で初期化しようとしたと思い0
ますか?
試す:
static float zeros[4] = {0.0, 0.0, 0.0, 0.0};
myvector.resize(newsize, zeros);