访问两个元素集合的其他元素的简明语法是什么?

时间:2014-08-17 20:51:18

标签: c++ syntax stl

我有一个2元素集合{a, b}和一个复杂表达式ex(_, _),以非交换方式涉及这两个元素。我正在寻找的计算结果相当于:

ex(a, b);
ex(b, a);

但不是重复整个表达式两次(定义函数计算ex是不可接受的),我想使用这样的循环:

for (auto i: {a, b})
  ex(i, <other element>);

编写这样一个循环的简短方法是什么?

修改

由于读者人数发现我的问题不清楚,请看下面的两个答案,这些答案提供了我正在寻找的解决方案。 ex(a, b)是按顺序使用ab的大量代码的简写。我不想定义函数ex的原因主要是风格,超出了这个问题的范围。

2 个答案:

答案 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]);