gpt4 book ai didi

c++ - 从 vector 中提取最小的复数

转载 作者:行者123 更新时间:2023-11-27 23:27:28 24 4
gpt4 key购买 nike

vector 正在将点指向一个矩形。我希望能够获取最低和最高的复数并将其分配给 2 个不同的复数。我只尝试使用下面的最低值,但它似乎没有找到最低值,只返回第一个元素。

vector < complex<double>* > xs;
typedef typename vector < complex<double>* >::iterator Iter;
xs.push_back(&pointa);
xs.push_back(&pointb);
xs.push_back(&pointc);
xs.push_back(&pointd);

for (Iter p = xs.begin(); p != xs.end(); ++p)
{
if((*p)->real()<(*p+1)->real() && (*p)->imag()<(*p+1)->imag())
{
double a = (*p)->real();
double b = (*p)->imag();
complex <double> botleft_1(a,b);
}
else
{
}
}

有什么建议吗?

最佳答案

您代码中的直接错误是 *p+1表示 (*p)+1 .

修复后的下一个错误 *(p+1)将是你离开 vector 末尾的一个元素。您应该将每个值与迄今为止的最低/最高值进行比较,而不是与 vector 中的下一个值进行比较。

在任何情况下都没有“最低”或“最高”复数这样的东西 - 复数不是有序域(定理)。您可以在复数上定义任何您喜欢的比较运算符,但这将是相当随意的,例如它不一定具有有序的字段属性,例如 a < b && c < d => a+c < b+d。 .您定义的比较确实具有该属性,但不是严格的弱顺序,因此一旦您开始在 3 个或更多值之间进行比较,它的行为可能不会像您预期的那样。

例如,考虑值 complex<double> a(1,1), b(0,3), c(2,2); , 以及比较函数 lt(complex<double> lhs, complex<double> rhs) { return lhs.real() < rhs.real() && lhs.imag() < rhs.imag(); } .

然后lt(a,b)lt(b,a)都是假的。这意味着 ab就顺序而言是等效的。

同样,lt(b,c)lt(c,b)都是假的。这意味着 bc就顺序而言是等效的。

然而,lt(a,c)是真的。这意味着 ac就顺序而言,它们并不相同。

关于c++ - 从 vector 中提取最小的复数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8339473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com