2016-09-19 3 views
2

나는 내가 사용하고있는 라이브러리 만 벡터를 입력으로 사용하기 때문에 벡터로 변환해야하는 매우 큰 valarray가 있습니다. 복사하지 않고 valarray에서 vector로 변환 할 수 있는지 궁금합니다. 여기에 내가 가진 무엇 :복사하지 않고 벡터에 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

그건 불행한 일입니다. 가질 수있는 좋은 기능이었을 것입니다. 당신의 도움을 주셔서 감사합니다. –

관련 문제