包含复数的向量的运算符重载

Posted

技术标签:

【中文标题】包含复数的向量的运算符重载【英文标题】:Operator Overloading for vector holding complex numbers 【发布时间】:2018-10-22 20:34:47 【问题描述】:
#include<iostream>
#include<cmath>
#include<complex>
#include<vector>

using namespace std;

vector<complex<double> > Compute_wn(int n);
int main()


    Compute_wn(8);
    return 0;



vector<complex<double> > Compute_wn(int n)

    vector<complex<double> > V[n];
    for(int i = 0; i<n; i++)
    
        V[i] = complex<double>(cos(2.0*M_PI*double(i)/double(n)),sin(2.0*M_PI*double(i)/double(n)));
        cout<<V[i]<<"\t";
    
    cout<<"\n";

我是 C++ 新手。当我编译这段代码时,我得到的错误是那个错误:没有可行的重载'='。 (V[i] = complex&lt;double&gt;(cos(2.0*M_PI*double(i)/double(n)),sin(2.0*M_PI*double(i)/double(n)));) 我不明白如何为 double 类型的复数向量重载运算符 '='。据我了解,向量是复数向量,我应该能够直接分配给 V[I]。

【问题讨论】:

【参考方案1】:

你混合了数组和向量语法,这是罪魁祸首:

vector<complex<double>> V[n];

这定义了一个 大小为 n 的数组 vector&lt;complex&lt;double&gt;&gt;。由于n 不是编译时常量,因此不应该允许这样做,但一些编译器接受它作为非标准扩展。请参阅here 进行讨论。

这意味着V[i] 实际上是vector&lt;complex&lt;double&gt;&gt;,而不是complex&lt;double&gt;,这就是为什么你不能为它分配complex&lt;double&gt;

解决方法是正确初始化你的向量:

vector<complex<double>> V;
V.resize(n);

注意:您目前没有从您的函数中返回任何被声明为返回vector&lt;complex&lt;double&gt;&gt; 的东西,这将导致与未定义行为相关的问题。你的意思是return V;

【讨论】:

以上是关于包含复数的向量的运算符重载的主要内容,如果未能解决你的问题,请参考以下文章

YTU 2439: C++习题 复数类--重载运算符+

重载运算符,让你的复数类使用起来更加方便

C++复数运算的运算符重载

复数类重载加法减法和乘法运算符

YTU 2443: C++习题 复数类--重载运算符3+

YTU 2441: C++习题 复数类--重载运算符2+