微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对 2D 向量执行单行算术以找到缩减行形式 C++

如何解决对 2D 向量执行单行算术以找到缩减行形式 C++

因此对于交流电路,您有时必须解决具有复数的线性系统,而我正在为我制作一个快速而肮脏的程序。我已经编写了将创建用户定义大小和输入的矩阵(二维向量)的代码,我只是不知道如何让它逐行执行算术运算。我尝试遍历第一行并将每个元素乘以 1/matrix[1][1] 但是它给了我一条错误消息,说我无法执行该操作。这是我迄今为止为上述目的编写的代码。我对 C++ 和整个编码相对较新,所以可能有一种简单的方法可以做到这一点,我很想念。

#include <iostream>
#include <vector>
#include <cmath>
#include <complex>

using namespace std;
int main() 
{

    int rows;
    int columns;
    cout << "Enter number of rows: " << endl;
    cin >> rows;
    cout << "Enter number of columns: " << endl;
    cin >> columns;

    vector<vector<complex<double> > > matrix(rows,vector<complex<double> > (columns));
    int k = 0;
    for (int i = 0; i < rows; i++)
    {
        k++;
        cout << "Enter row " << k << ": " << endl;
            
        for (int j = 0; j < columns; j++)
        {
            complex<double> input;
            cin >> input;
            matrix[i][j] = input;
        }

    }

    for (int g = 0; g < rows; g++)
    {
        for (int h = 0; h < columns; h++)
        {
            cout << matrix[g][h] << " ";
        }
        cout << endl;
    }
    
for (int b = 0; b < columns; b++) {
        matrix[1][1] = a;
        matrix[1][b] = (matrix[1][b]) * (1 / a)

    }
    return 0;
}`

解决方法

您必须手动将它们转换为复杂的,或者匹配它的类型

std::complex<double> x(1,2); // x = 1.0 + 2.0i

// x * 3 Error!,3 is int
auto y = x * std::complex<double>(3,0); // works! y = 3.0 + 6.0i
auto z = x * 3.0
,

我尝试遍历第一行并将每个元素乘以 1/matrix[1][1],但是它给了我一条错误消息,说我无法执行该操作。

如果 matrix 被声明为

vector<vector<complex<double> > > matrix(rows,vector<complex<double> > (columns));

其元素的类型为std::complex<double>,因此底层类型为double

二进制 math operators 的重载接受复杂和标量类型,但类型需要匹配:

// since C++20 those are constexpr
template< class T >
constexpr std::complex<T> operator/( const std::complex<T>& lhs,const std::complex<T>& rhs );
template< class T >
constexpr std::complex<T> operator/( const std::complex<T>& lhs,const T& rhs);
//                                                      ^              ^
template< class T >
constexpr std::complex<T> operator/( const T& lhs,const std::complex<T>& rhs);
//                                         ^                          ^

虽然 OP 提到

1 / matrix[1][1]
^ That's an int,not a double. 1.0 would have worked (note that 1.0f wouldn't).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。