Я понимаю ваш вопрос, что вы хотите объединить вектор действительных частей с вектором мнимых частей в вектор комплексных чисел.
std::complex
имеет один шаблонный параметр, который позволяет вам выбирать числовое представление частей комплекса (то есть, если вы хотите, чтобы комплексные значения основывались на double
или float
или даже каком-либо пользовательском типе числа ...). Комплексный тип тогда определяет базовую комплексную алгебру в терминах базового типа.
В вашем коде вы пытаетесь создать сложный тип на основе вектора чисел с плавающей точкой (т. Е. одиночное комплексное значение, имеющее действительную и мнимую часть, являющуюся вектором), что, очевидно, неверно. Вместо этого вам нужен вектор комплексных чисел типа float
Вы должны сделать что-то вроде:
// ...
typedef std::vector<std::complex<float> > floatComplexVector;
floatComplexVector vA_Complex; // No need to 'new' !?
for (CVFLoat::const_iterator itA = vA.begin(), itB = vB.begin();
itA != vA.end() && itB != vB.end();
++itA,++itB)
vA_Complex.push_back(std::complex<float>(*itA, *itB));
Примечания:
В большинстве случаев нет необходимости создавать контейнеры, например векторы, в куче (т. Е. Используя new
). Постарайтесь избежать этого.
К сожалению, стандартная библиотека C ++ не содержит объединяющего итератора (то есть того, который «автоматически» объединяет две последовательности), который позволял бы более элегантное решение (для общей идеи см. Boost Zip iterator ) .