从向量中提取最低复数
Extracting lowest complex number from a vector
向量指向一个矩形。我想把最小和最大的复数赋值给两个不同的复数。我只尝试了下面的最低,但它似乎没有找到最低,只是返回第一个元素。
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)
均为假。这意味着a
和b
在排序上是等价的。
同理,lt(b,c)
和lt(c,b)
都为假。这意味着b
和c
在排序上是等价的。
然而,lt(a,c)
是正确的。这意味着就排序而言,a
和c
是不相等的。
在循环中不与最小的数字比较,只与下一个数字比较。试试这样做:
complex<double> *lowest = *xs.begin();
for (Iter p = xs.begin() + 1; p != xs.end(); ++p){
if ((*p)->real() < lowest->real() && (*p)->imag() < lowest->imag())
lowest = *p;
}
循环结束后,变量lowest
必须是您想要的。
同样,在你的循环版本中,你比较p + 1
,最后一项将是xs.end()
,这将不是一个有效的指针。
使用boost::minmax_element
std::pair< Iter > pairit = boost::minmax_element( xs.begin(), xs.end(),
[&]( complex<double>* pcomplexA, complex<double>* pcomplexB ) {
// Suitable comparison predicate (see Steve Jessop's answer)
return pcomplexA->abs() < pcomplexB->abs(); // |a| < |b|
});
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 如何创建一个函数来提取向量内部字符串中的字段?
- 将不同类型的模板参数包提取到双精度向量中会产生警告
- 遍历对象向量,并找到与从文本文件中提取的对象匹配的变量
- 如何从多维向量中提取数据
- 在 C++ 中,仅使用递归来提取向量中的最大元素
- 将张量的"lower diagonal"映射到矩阵,作为将矩阵的下三角形部分提取到向量的推广
- C :如何将多个URL从网站HTML提取到向量
- 从向量中提取最小值、最大值和中位数的最有效方法是什么
- 制作一个对的向量,对其进行排序,然后从中提取向量
- 从元组中提取向量
- 读取文件后提取子向量时的C 错误
- 从坐标向量中提取坐标并保存到文件
- 将一个向量(从向量的一个向量中提取)分配给另一个向量时出错,运算符为
- 提取向量的其他元素
- 在向量中查找值,并从该位置提取子向量
- 使用 std::unique_copy 从向量中提取不区分大小写的唯一字符串
- 如何从Eigen中的索引向量中提取子向量(Eigen::Vector)
- 从 std::map<int, std::vector 中提取向量>
- 从矩阵中提取向量的正确方法是什么