gpt4 book ai didi

c++ - 比较对象数组和对象字段数组

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

是否有比较 arr[i].A 与 A[i] 和 arr[i].B 与 B 的好方法?

int A[10], B[10];

class Foo {
int A, B;
};

Foo arr[10];

我可以做以下事情:

for (i=0;i<10;i++) {
if (A[i] == arr[i].A) {}
if (B[i] == arr[i].B) {}
}

但是,这很痛苦,尤其是在有很多字段的情况下,并且 if() 条件一遍又一遍地做同样的事情,将会有很多代码重复。我真正想做的是以某种方式对其进行参数化并调用类似 (test(A,arr)) 的函数。我想我可以通过使用#define 宏来解决这个问题,但这看起来很难看。

有什么建议吗?

我还想避免创建一个新的 Foo 对象数组,因为我不想创建可能包含许多我不关心的字段的新对象,而且我可能想比较不同的字段子集。

最佳答案

如果范围大小相等,您可以将 std::equal 与谓词(或 lambda)一起使用:

bool CompA( int lhs, Foo rhs ){
return lhs == rhs.A;
};
...
// to check for equality
bool result = std::equal( A, A + 10, arr, CompA );
...
// to see where the mismatch is
std::pair< int*, Foo* > result = std::mismatch( A, A + 10, arr, CompA );
size_t index = result.first - A;
if( index < 10 ){
std::cout << "Mismatch at index " << index << " A = " << *result.first << " Foo.A = " << (*result.second).A << std::endl;
}

关于c++ - 比较对象数组和对象字段数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5332964/

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