2017-09-04 3 views
1

저는 복소수 벡터 클래스를 사용합니다. 이와 같이, 복소수와 복소수 벡터를 곱오류 : '연산자 *'에 일치하는 항목이 없습니다 (피연산자 유형이 'std :: vector <std :: complex><double>'및 'std :: complex <double>')

vector< complex<double> > vec; 
complex<double> z; 
// some initialization of vec and z ... 
vector< complex<double> > res; 
res = vec*z; // here is the error 

error: no match for ‘operator*’ (operand types are ‘std::vector<std::complex<double> >’ and ‘std::complex<double>’)

는 이러한 매개 변수 * 연산자 과부하 할 수 있는가?

답변

2

예, 가능합니다. 다음은 complex<T>에 대한 자신 운영자 *을 구현할 수있는 방법은 다음과 같습니다

template <typename T> 
vector<complex<T>> operator *(const vector<complex<T>>& v, const complex<T> z) { 
    vector<complex<T>> res; 
    transform(v.begin(), v.end(), back_inserter(res), 
     [&](complex<T> x) -> complex<T> { 
      return x * z; 
     }); 
    return res; 
} 
+0

덕분에, 정확히 내가 그것을 필요로하는 방법을 작동합니다. – Pekov

+2

스크롤 막대를 제거하기 위해 편집했습니다. "vector "의 올바른 형식의 버전보다 읽기 쉬운지 흥미로운 질문입니다. res (v); for (auto & x : res) x * = z; return res;', 그리고 상대적인 성능 특성은 무엇인가. –

관련 문제