如何在不混淆字段的情况下声明复数? [复制]
Posted
技术标签:
【中文标题】如何在不混淆字段的情况下声明复数? [复制]【英文标题】:How to declare complex numbers without their fields getting mixed up? [duplicate] 【发布时间】:2019-11-27 02:38:21 【问题描述】:我尝试创建复数,但无论出于何种原因,它们总是出现实部具有虚值而虚部归零。 例如,我希望这个小测试应用程序能够打印 (1,2) 的多个实例,但无论我如何尝试接近它,我得到的都是 (2,0)。
#include "stdafx.h"
#include <complex>
#include <iostream>
using namespace std;
int main()
std::complex<double>** complexdouble_c;
complexdouble_c = new std::complex<double>*[5];
for (int i = 0; i < 5; ++i)
complexdouble_c[i] = new std::complex<double>[2];
for (int i = 0; i < 5 && i < 15; i++)
for (int j = 0; j < 2 && j < 15; j++)
double real = 1;
double imag = 2;
complexdouble_c[i][j] = (real, imag);
for (int i = 0; i < 5 && i < 15; i++)
for (int j = 0; j < 2 && j < 15; j++)
std::cout << complexdouble_c[i][j];
std::cout << "\n";
std::complex<double> complexdouble;
double real = 1.0;
double imag = 2.0;
complexdouble = (real, imag);
std::cout << complexdouble;
std::cout << complexdouble.real();
std::cout << complexdouble.imag();
getchar();
【问题讨论】:
您可能应该重新考虑使用 C++ 编写 Java 代码的倾向。这个程序没有什么需要使用new
。所有这些都会造成大量内存泄漏,以及大量滥用或不当使用指针的机会,从而导致未定义的行为和崩溃。
@Sam Varshavchik 如果我要尝试制作一个二维数组,我会为它保留内存。 std::complex 有什么让它与众不同的地方吗? (另外我也不是很懂 Java。我只是简单地尝试做一个虚拟示例,我将尝试将其转换为动态数组。)
出现错误的机会更少,并且没有需要处理的内存泄漏。而且这种方法实际上比单个二维数组或std::array
浪费更多的内存。
complexdouble = (real, imag);
不会做你认为的那样。 (real, imag)
的意思是“评估 real 并将其丢弃,然后评估 imag 并返回其值”。有关更详细的说明,以及分配复数的正确方法列表,请参阅副本。
【参考方案1】:
以这种格式声明。这将给出以下输出
std::complex<double> c(1, 2);
// 1 + 2i
【讨论】:
以上是关于如何在不混淆字段的情况下声明复数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
JAVA如何在不复制新实例引用的情况下更改实例字段值[重复]
如何在不指定字段名称的情况下使用 mongodb 在 nodejs 中进行部分数据搜索? [复制]