gpt4 book ai didi

C++ 循环和比较编号变量

转载 作者:太空狗 更新时间:2023-10-29 23:48:46 27 4
gpt4 key购买 nike

我有一个具有类似命名变量的结构,例如

char        c1;
char c2;
char c3;
char c4;
char c5;
char c6;
char c7;
char c8;

我需要的是一个将输入与每个进行比较的循环。

//Something Like
for(int i = 1; i <= 8; i++) {
if(compared == foo->c(i)) {
return compared;
}
}

现在我有一长串 if 和 else。不幸的是,我无法更改结构。如果一长串 if/elses 是最有效的方法(性能而不是代码看起来有多好),那么我就保持这样。

我基本上想要一个循环来更改我当前正在比较的变量名,以使代码不那么困惑并希望更快。

最佳答案

好吧,由于您无法更改结构,因此可以通过使用指向字段的指针数组来避免一些重复并解决要求:

char const * c_ptr[] = {
&foo->c1, &foo->c2, &foo->c3, /* ... */, &foo->c8
};

将你的循环变成这样:

for(int i = 0; i < 8; ++i) {
if(compared == *c_ptr[i]) {
return compared;
}
}

但实际上,如果可能的话,尽量插入改变结构。


考虑到这是 C++,另一种选择是使用指向成员的指针。这具有制作数组 constexpr 的额外好处(在编译时完全已知)。例如,这段代码......

static constexpr char Foo:: *c_ptr [] = {
&Foo::c1, &Foo::c2, &Foo::c3, &Foo::c4,
&Foo::c5, &Foo::c6, &Foo::c7, &Foo::c8
};

for(int i = 0; i < 8; ++i) {
if(compared == foo->*c_ptr[i]) {
return compared;
}
}

...可以是successfully optimized一个展开的循环,相当于一系列分支。

关于C++ 循环和比较编号变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53377281/

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