2016-09-19 1 views
2

私はベクトルに変換する必要がある非常に大きなvalarrayを持っています。私はそれがコピーせずにvalarrayからベクトルに変換することが可能かどうか疑問に思っています。ここで私が持っているものです。コピーしていないベクトルへのvalarrayの変換

#include <vector> 
#include <valarray> 

int main() { 
    std::valarray<double> va{ {1, 2, 3, 4, 5} }; 

    //Error: cannot convert from 'initializer list' to 'std::vector<eT,std::allocator<_Ty>>' 
    //std::vector<double> v1{ std::begin(va), va.size() }; 

    //Error: cannot convert from 'std::valarray<double>' to 'std::vector<eT,std::allocator<_Ty>>' 
    //std::vector<double> v2{ std::move(va) }; 

    // Works but I'm not sure if it's copying 
    std::vector<double> v3; 
    v3.assign(std::begin(va), std::end(va)); 
} 

assign上のドキュメントは関数は「現在の内容を置き換え、それに応じてサイズを変更し、ベクトルに新しい内容を割り当てます。」と述べています。それは私にそれがコピーのように聞こえる。コピーせずにそれを行う方法はありますか?

+0

'std :: valarray'と' std :: vector'では、私はかなり不可能だと確信しています。 –

答えて

5

いいえ、コピーせずにvalarrayvectorに変換することはできません。

あなたのオプションは以下のとおりです。

  1. は、既存のコードベースはvectorを使用し、valarrayの利点のほとんどを維持するためにexpression templatesを使用して変換します。
  2. ライブラリをvalarrayに変換します。
  3. コピー。

私はオプション3から始めてコピーします。

+1

* "私はオプション3から始めてコピーします。" *良いアドバイス、それは測定がそれが証明するまでそれほど遅くはありません。 –

+0

それは残念です。持っているのは素晴らしい機能でした。ご協力いただきありがとうございます。 –

関連する問題