求:返回结构数组中某个域最小的数组下标 的 宏定义或函数

OlOl 2006-06-22 09:06:05
有一些结构,如
struct S1_t
{
double keyField ;
..
}

S1_t s1[100];


返回s1中 keyfield 最小的下标。

当然,这个任务可以用下面的代码实现:

//----------------------------------------------

double minvalue = 100000000.0;

for (int i=0; i< 100; i++ )
{
if (s1[i].keyField < minvalue )
{
minvalue =s1[i].keyField;
index = i;
}
}

//----------------------------------------------

但是,如果数组有很多,而且有结构名或域名也不同,
如何做一个宏,使得 struct的名字,field的名字变化时
都能应用呢?

比如,定义 MIN(数组的变量名,关键域名)
使
index = MIN(s1, keyField);

得到 数组s1 的keyField最小的 项的下标。


...全文
157 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
OlOl 2006-06-22
  • 打赏
  • 举报
回复
但是我要的就是struct里面的field的名字会不停的变的呀?

比如 sturct s1_t
{
double f1;
..
}

s1_t s1[100];

比较的是 f1


struct s2_t
{
double f2;
}

s2_t f2;


s2_t s2[100]



回fireseed: 不是不同的结构放到同一个数组,
而是希望有这么个宏(函数)能都应付不同类型的数组,
其公共特征是
在某个数组中找出某项的下标,该项的某个域是整个数组中最小的。

至于数组的类型,域的名字,则会变化。



DentistryDoctor 2006-06-22
  • 打赏
  • 举报
回复
template?
fireseed 2006-06-22
  • 打赏
  • 举报
回复
还有一点搞不清楚,名字不同的结构体,你怎么能把它们放到一个数组里?
fireseed 2006-06-22
  • 打赏
  • 举报
回复
这样的东西应该是一个函数,而不是宏,记住,最好不要在宏里定义循环


你的那些结构体如果内部结构一样的话,比如都是下面这个样子

struct StructName
{
double dFieldName;
};

那么你可以直接把结构体的指针强制转换为double指针使用。但如果内部结构不一样,或着数据成员的类型不一样,那你只能去尝试模版,然后重载逻辑比较运算符这样

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧