Wyodrębnienie części rzeczywistej wektora

0

Mam wypełniony wektor

std::vector<std::complex<double>> vec1;

Potrzebuje wziąć część rzeczywistą tego wektora do kolejnego wektora(typu double). Wiem, że istnieje funkcja std::real, która wyświetla część rzeczywistą , ale nie potrafię jej prawidłowo użyć w tym przypadku.

2

Musisz przeiterować po tym wektorze. Np. tak (może da się lepiej)

#include <vector>
#include <iostream>
#include <algorithm>
#include <complex>

using namespace std;
int main(int, char**)
{

   vector<complex<double>> c { {1,2}, {2, 3}, {5, 1} };
   vector<double> r;
   for_each(c.cbegin(), c.cend(), [&] (const auto& el) {r.push_back(real(el)); });
   ostream_iterator<double> out {cout, ", "};
   copy(r.cbegin(), r.cend(), out);
   cout << endl;
   return 0;
}
0

Wydaje mi się że nie potrzebujesz tego std::vector. Wbrew nazwie jest to po prostu lista. Czyli wektor complexów to będzie lista liczb zespolonych. Nazwa jest pewnie stąd, że (matematycy pewnie by poprawili) każda lista elementów (krotka uporządkowana) jest wektorem. Tak samo complex ma jasno zdefiniowaną część rzeczywistą i urojoną więc sam w sobie jest wektorem i nie potrzebujesz już go pakować w std:vector.
Być może wszystko czego potrzebujesz to:

#include <iostream>
#include <complex>
using namespace std;
 
int main() {
	complex<double> c1 = 1. + 2i;
	complex<double> c2 = c1 + 2i; // kopiujemy c1, dodajemy dla przykładu (0,2) i przypisujemy do c2
	cout << "c1: " << c1 << endl;
	cout << "c2: " << c2 << endl;
	return 0;
}
2
template<typename T>
std::vector<T> realVec(const std::vector<std::complex<T>& v)
{
    std::vector<T> r;
    r.reserve(v.size());

    std::transform(v.begin(), v.end(), std::back_inserter(r), [](auto c) { return c.real(); });
    return r;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1