如何在C ++中获得向量复数值的最大值,最小值和位置?

在Matlab中,我们可以获得最大值,最小值以及复数矢量的位置:

[mag_x idx_x] = max(abs(X));
[mag_y idx_y] = max(abs(Y));

我知道我们可以用C ++做类似的事情,因为Matlab是从C ++构建的。但是我无法弄清楚。我也有不完整的代码,并且仍在处理:

#include <iostream>     // std::cout
#include <algorithm>    // std::min_element, std::max_element
#include <vector>
#include <complex>
#include <iostream>
int main()
{

//typedef std::complex < double > C
vector <complex<short> > vec;

vec.push_back ( complex <short> (1,1));
vec.push_back ( complex <short> (1,2));
vec.push_back ( complex <short> (3,4));
vec.push_back ( complex <short> (0,0));
vec.push_back ( complex <short> (4,8));
vec.push_back ( complex <short> (0,0));
vec.push_back ( complex <short> (2,3));
vec.push_back ( complex <short> (1,1));

int size = sizeof(x_vec)/sizeof(x_vec[0]);
for(int i =0; i < size; i++)
{
    cout << x_vec[i] << endl;
}
 ...

return 0;
}

我还将通过以下链接查看示例代码:http : //www.cplusplus.com/reference/algorithm/max_element/,但它仅对矢量有效。

另外,当我计算时,size = sizeof(x_vec)/sizeof(x_vec[0]);我期望大小= 8(因为上面有8个矢量复数),但我只给了大小= 6。

杰克·迪斯

vector<complex>与一起使用std::max_element,您需要提供一个比较两个complex对象的值的函数您需要执行此操作,因为有多种方法可以对其进行比较。

一种方法是编写一个Lambda函数,complex使用来比较两个es std::abs您可以在对以下内容的调用中写成max_element

// C++14
auto maxelem = max_element(vec.begin(), vec.end(),
                           [](auto a, auto b) { return abs(a) < abs(b); });
// C++11
auto maxelem = max_element(vec.begin(), vec.end(),
                           [](const complex<short>& a, const complex<short>& b)
                             { return abs(a) < abs(b); });

cout << "Max: " << *maxelem << endl;

max_element产生一个包含找到的最大值的迭代器。可以在向量中找到该迭代器的索引std::distance

cout << "Max position: " << std::distance(vec.begin(), maxelem) << endl;

complex比较器功能可以被存储在auto用于再使用:

// C++14
auto absLess = [](auto a, auto b) { return abs(a) < abs(b); };
// C++11
auto csAbsLess = [](const complex<short> &a,
                    const complex<short> &b) { return abs(a) < abs(b); };

我们可以将其与其他各种标准库算法(例如min_element和)一起使用sort

auto maxelem = max_element(vec.begin(), vec.end(), absLess);
cout << "Max: " << *maxelem << endl;
cout << "Max position: " << std::distance(vec.begin(), maxelem) << endl;

auto minelem = min_element(vec.begin(), vec.end(), absLess);
cout << "Min: " << *minelem << endl;
cout << "Min position: " << std::distance(vec.begin(), minelem) << endl;

sort(vec.begin(), vec.end(), absLess);

for (const auto &c : vec) {
  cout << c << endl;
}

输出:

Max: (4,8)
Max position: 4
Min: (0,0)
Min position: 3
(0,0)
(0,0)
(1,1)
(1,1)
(1,2)
(2,3)
(3,4)
(4,8)

当然,它不如雄辩[mag_x idx_x] = max(abs(X));

在线演示在此处的Wandbox上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获得每个组中的最大值和最小值以及它们的时间?

如何在Postgres / SQL中获得两个整数的最小值/最大值?

如何从向量中删除一个最大值和一个最小值?

如何获得数组的最小值,最大值?

如何获得String []数组的最大值/最小值?

从C ++中的向量中找出局部最大值/局部最小值(范围)的数量

如何获得每个用户的最小值和最大值的唯一记录

如何获得Bootstrap滑块的最小值和最大值?

如何获得带有空格的数组的最大值和最小值?

我如何获得元组的最小值和最大值

如何在2D数组中搜索最小值和最大值

如何在iOS图表中添加最大值和最小值的箭头?

如何在ropropie Js库中设置滑块的最小值和最大值

如何在组(SQL)中查找具有最小值和最大值的记录?

如何在熊猫数据框中设置最小值和最大值?

如何在Mips中打印数组的最大值和最小值

如何在Android的RangeSeekBar中获取当前的最小值和最大值?

如何在chartJS中的最大值和最小值之间绘制线?

如何在jQuery中为变量添加最大值和最小值

如何在单行中获取最小值和最大值以及对应的ID

如何在 SQL 中获取一组行的最小值和最大值?

如何在Google Visualization Gauge中删除最小值和最大值

如何在collections.defaultdict中查找最小值和最大值

如何在一列中显示最大值和最小值

如何在Java中搜索最大值和最小值

如何在 MongoDB 中获取最大值和最小值?

如何获得从R中的函数中吐出最小值/最大值的坐标?

如何找到二维数组的最大值和最小值的位置

如何使用C++中的指针获取最小值和最大值