web-dev-qa-db-ja.com

配列のベクトルを使用する正しい方法

誰かが配列のベクトルを扱う正しい方法を教えてもらえますか?

配列のベクトル(vector<float[4]>)しかし、error: conversion from 'int' to non-scalar type 'float [4]' requestedresize itを試みたとき。何が悪いのでしょうか?

55
Pulkit Sinha

配列を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ライブラリのテンプレート 。または、独自に作成することもできます。とても簡単です。)

114
James McNellis

つかいます:

vector<vector<float>> vecArray; //both dimensions are open!
8
Nawaz

次のコードにはエラーはありません。

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

ジェームズ・マクネリスが示唆した。

8
user2133061

ベクターのすべての要素はfloat[4]であるため、サイズを変更するときはすべての要素をfloat[4]からデフォルトで初期化する必要があります。 0のようなint値で初期化しようとしたと思いますか?

試してください:

static float zeros[4] = {0.0, 0.0, 0.0, 0.0};
myvector.resize(newsize, zeros);
5
Mark Ransom