79

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

vector<float[4]>配列のベクトル( )を宣言しましたが、それerror: conversion from 'int' to non-scalar type 'float [4]' requestedを試みたときに取得しましresizeた。何が問題になっていますか?

4

4 に答える 4

143

vector配列をまたは他のコンテナに格納することはできません。コンテナに格納される要素のタイプ(コンテナの値型と呼ばれる)は、コピー構成可能であり、割り当て可能である必要があります。配列はどちらでもありません。

arrayただし、 Boost、TR1、C++0xで提供されているようなクラステンプレートを使用することはできます。

std::vector<std::array<double, 4> >

(に置き換えstd::arraystd::tr1::array、C ++ TR1に含まれているテンプレートを使用するか、Boostライブラリのテンプレートboost::arrayを使用することをお勧めします。または、独自に作成することもできます。非常に簡単です。)

于 2011-01-06T06:18:55.960 に答える
11

使用する:

vector<vector<float>> vecArray; //both dimensions are open!
于 2011-01-06T06:15:58.130 に答える
9

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

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

ジェームズ・マクネリスが提案した。

于 2014-10-06T11:37:37.947 に答える
4

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

試す:

static float zeros[4] = {0.0, 0.0, 0.0, 0.0};
myvector.resize(newsize, zeros);
于 2011-01-06T06:17:03.740 に答える