2

私の質問は、C++ での数値型変換に関するものです。これを行うための非常に一般的な方法は、次のように static_cast を使用することです。

float a;
int b;
a = 3.14;
b = static_cast<int>(a);

では、数値ベクトルの型変換はどうでしょうか。static_cast を引き続き使用できますか? 私は次の実験を行いました:

typedef vector<int> IntVector;
typedef vector<float> FloatVector;
IntVector myvector;
myvector.push_back(3);
myvector.push_back(4);
myvector.push_back(5);

// Solution 1 (successful)
FloatVector solution1 ( myvector.begin(), myvector.end() );
for(int i=0; i<solution1.size(); i++)
   cout<<solution1[i]<<endl;
// Solution 2 (failed)
FloatVector solution2;
solution2 = static_cast<FloatVector> (myvector);

数値ベクトル型の場合、 static_cast を使用して変換することはできないようです。この問題に対する良い解決策があるかどうか疑問に思っていました。ありがとう!

4

3 に答える 3

3

順次割り当てを実行するため、std::copyを使用できます。

于 2012-08-02T08:43:31.670 に答える
2

テンプレート パラメーター( ) を持つコンテナーを、テンプレート パラメーターT( std::vector<int>) を持つ別のコンテナーに割り当てたり、キャストしたりすることはできません。結局、彼らは異なるクラスです。Lstd::vector<float>

ただし、イテレータを使用するため、次のものを入力できFloatVectorますstd::copy

FloatVector solution2(myvector.size());

std::copy(myvector.begin(),myvector.end(),solution2.begin());

あなたのコメントに対処するために編集してください:

現在の関数シグネチャf(FloatVector)

template< class T >
ReturnType f(std::vector<T> myVector, ....);
于 2012-08-02T08:45:21.340 に答える
2

この言語は、ある数値型から別の数値型への変換を直接サポートしています。さえ必要ありませんstatic_cast。割り当てることができます。この変換には、値表現の再解釈ではなく、値の論理コピーが含まれます。

この言語は、異なる型の配列間の変換、または異なる型の問題を直接サポートしていませんstd::vector

しかし、おわかりのように、要素のコピーにはいくつかのサポートがあり、各要素が数値の場合、各要素に対して数値型変換の組み込みサポートが開始されます。

于 2012-08-02T08:55:09.887 に答える