在 2D 向量上执行单行算术以找到简化的行形式 C++
Posted
技术标签:
【中文标题】在 2D 向量上执行单行算术以找到简化的行形式 C++【英文标题】:Performing Single Row Arithmetic on 2D Vector to find Reduced Row Form C++ 【发布时间】:2021-02-24 03:18:41 【问题描述】:因此,对于交流电路,有时您必须解决具有复数的线性系统,而我正在编写一个快速而肮脏的程序来为我做这件事。我已经编写了将创建用户定义大小和输入的矩阵(2D 向量)的代码,我只是不知道如何让它逐行执行算术运算。我尝试遍历第一行并将每个元素乘以 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;
`
【问题讨论】:
你能显示给你错误的代码以及完整的错误信息吗? 我添加了给我带来麻烦的 for 循环。它不是错误消息,但 Visual Studio 在我尝试执行操作的除法符号下方有红色下划线(1 / a)。 【参考方案1】:我尝试遍历第一行并将每个元素乘以
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).
【讨论】:
【参考方案2】:您必须手动将它们转换为复杂的,或者匹配它的类型
即
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
【讨论】:
嗯,不是真的。 有 math operators 的重载接受复杂和标量类型,但types have to match。以上是关于在 2D 向量上执行单行算术以找到简化的行形式 C++的主要内容,如果未能解决你的问题,请参考以下文章
2D 向量的 C++ 问题:执行时,您的代码以非法的方式修改了内存