我有一个2元素集合{a, b}
和一个复杂表达式ex(_, _)
,以非交换方式涉及这两个元素。我正在寻找的计算结果相当于:
ex(a, b);
ex(b, a);
但不是重复整个表达式两次(定义函数计算ex
是不可接受的),我想使用这样的循环:
for (auto i: {a, b})
ex(i, <other element>);
编写这样一个循环的简短方法是什么?
修改
由于读者人数发现我的问题不清楚,请看下面的两个答案,这些答案提供了我正在寻找的解决方案。 ex(a, b)
是按顺序使用a
和b
的大量代码的简写。我不想定义函数ex
的原因主要是风格,超出了这个问题的范围。
答案 0 :(得分:1)
如果要始终将元素编入索引0和1(例如在向量v中),则可以使用exclusive或^
来选择替代索引:
for(auto i: {0, 1})
ex(v[i], v[i ^ 1]);
答案 1 :(得分:0)
这是一种方法:
for (auto i: {false, true})
ex(i ? a : b, i ? b : a);
另一个:
vector<int> v = {a, b};
do {
ex(v[0], v[1]);
} while(next_permutation(v.begin(), v.end()));
或:
vector<int> v = {a, b};
for (auto i: {0, 1})
ex(v[i], v[(i+1)%2]);