# C++ complex array

## Main Question or Discussion Point

Hi, I've been trying to write a program to solve a propagation of a wave packet using the time dependent schrodinger equation.
and I noticed I would need to use complex numbers.

I know that I need to use #include<complex>

I declare my array, and I started with a simple 1-d array.
complex<double>a[2]
When inputting data to the array I know that I would need something like this:
a[0] = (1,5);
a[1] = (2,8);

however when I output the data I only get:

a[0] = (5,0)
a[1] = (8,0)

Any idea how I can get around it?

And what about taking the complex conjugate of an array?

Related Programming and Computer Science News on Phys.org
Hurkyl
Staff Emeritus
Gold Member
Unfortunately, it did exactly what you asked it to!

The (default) comma operator is defined to:
(1) Evaluate its first argument
(3) Evaulate and return its second argument

So, the expression (1, 5) correctly evaluates to 5. For example, try this statement:

std::cout << (1, 5) << std::endl

Your problem is that you wanted to assign a complex number into the array, and so you must create the one you want to put into the array. An example of invoking the two-argument constructor to create a complex number is the expression

complex<double>(1, 5)

which evaluates to the complex number 1+5i.

Unfortunately, it did exactly what you asked it to!

The (default) comma operator is defined to:
(1) Evaluate its first argument
(3) Evaulate and return its second argument

So, the expression (1, 5) correctly evaluates to 5. For example, try this statement:

std::cout << (1, 5) << std::endl

Your problem is that you wanted to assign a complex number into the array, and so you must create the one you want to put into the array. An example of invoking the two-argument constructor to create a complex number is the expression

complex<double>(1, 5)

which evaluates to the complex number 1+5i.
Yeah, I just tried it and it did not work.

using cout << complex<double>(1,5) does indeed output (1,5).

However, when I use
Code:
complex<double> a;
a = complex<double>(1,5);
cout << a;
I get (5,0). And when I use std::cout << (1, 5) << std::endl I still get (5,0)

KTC
Are you sure you doing it right? It works fine here.

Code:
#include <iostream>
#include <complex>

int main()
{
std::cout << std::complex<double>(1.0, 5.0) << std::endl;

std::complex<double>a[2];
a[0] = std::complex<double>(2.0, 4.0);
a[1] = std::complex<double>(3.0, 3.0);

std::cout << a[0] << '\n' << a[1] << std::endl;

std::complex<double> b;
b = std::complex<double>(4.0, 2.0);
std::cout << b << std::endl;

return 0;
}
gives
(1,5)
(2,4)
(3,3)
(4,2)