Wyodrębnienie części rzeczywistej wektora

Wyodrębnienie części rzeczywistej wektora
WO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Mam wypełniony wektor

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

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

Craith
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 146
AL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1493
2

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

Kopiuj
#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;
}
SP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 127
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:

Kopiuj
#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;
}
MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
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;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.