Comment puis-je imprimer l'élément le plus élevé de Valarray de nombres complexes en C++?L'élément le plus élevé (partie réelle la plus élevée) dans Valarray de nombres complexes en C++
J'ai essayé avec ce code, mais il retourne les messages d'erreur
#include <iostream> // std::cout
#include <valarray>
#include <complex>// std::valarray
typedef std::complex<double> Complex;
typedef std::valarray <Complex > CArray;
int main()
{
CArray y[5]={{1, 2},{3, 4},{2,0},{7,0},{9,0}};
std::cout << "The max is " << y.max() << '\n';
return 0;
}
Sortie:
main.cpp: In function 'int main()':
main.cpp:15:35: error: request for member 'max' in 'y', which is of non-class type 'CArray [5] {aka std::valarray<std::complex<double> > [5]}'
std::cout << "The max is " << y.max() << '\n';
^
Qu'est-ce que je fais mal?
Deuxième version du Code j'ai modifié un peu le code, maintenant je voudrais obtenir tout indice correspondant à l'élément le plus élevé de mon valarray dans mon cas tout indice correspondant à l'élément {} 9,0
Note: par "élément le plus élevé" Je veux dire élément ayant la partie réelle le plus
nouveau code:
#include <iostream>
#include <valarray>
#include <complex>
#include <algorithm>
#include <numeric>
typedef std::complex<double> Complex;
typedef std::valarray <Complex > CArray;
int main()
{
CArray y={{1, 2},{3, 4},{2,0},{9,0},{7,0},{9,0}};
auto max_val = std::accumulate (std::begin(y), std::end(y), *std::begin(y),
[](const Complex& a ,const Complex& b)
{
auto abs_a = abs(a);
auto abs_b = abs(b);
//if(abs_a == abs_b)
// return std::max(arg(a), arg(b));
return std::max(abs_a, abs_b);
}
);
for (std::size_t i =std::begin(y) ; i != std::end(y) ; i++) {
std::cout << "The max is found on index ["<< i <<"]" << max_val<< '\n';
}
return 0;
}
Je reçois des erreurs suivantes: sortie:
main.cpp: In function 'int main()':
main.cpp:22:35: error: invalid conversion from 'std::complex<double>*' to 'std::size_t {aka long unsigned int}' [-fpermissive]
for (std::size_t i =std::begin(y) ; i != std::end(y) ; i++) {
^
main.cpp:22:54: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
for (std::size_t i =std::begin(y) ; i != std::end(y) ; i++) {
^
Comme écrit, y est un tableau de 5 valarrays, mais probablement OP entend un valarray de 5 nombres complexes. –
Par élément le plus élevé, j'entends élément ayant la partie réelle la plus élevée – Serge
@Serge: Mis à jour à nouveau pour prendre en charge _all_ indices (que j'ai raté la première fois que j'ai lu votre édition). – ildjarn