Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问两个元素集合的另一个元素的简明语法是什么?_C++_Syntax_Stl - Fatal编程技术网

C++ 访问两个元素集合的另一个元素的简明语法是什么?

C++ 访问两个元素集合的另一个元素的简明语法是什么?,c++,syntax,stl,C++,Syntax,Stl,我有一个2元素集合{a,b}和一个复杂表达式ex(,),以非交换方式涉及这两个元素。我正在寻找的计算结果相当于: ex(a, b); ex(b, a); 但是,我不想重复整个表达式两次(定义函数computingex是不可接受的),而是希望使用如下循环: for (auto i: {a, b}) ex(i, <other element>); for(自动i:{a,b}) 前(i,); 写这样一个循环的短方法是什么 编辑 由于很多读者发现我的问题不清楚,请看下面的两个答案,

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

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

但是,我不想重复整个表达式两次(定义函数computing
ex
是不可接受的),而是希望使用如下循环:

for (auto i: {a, b})
  ex(i, <other element>);
for(自动i:{a,b})
前(i,);
写这样一个循环的短方法是什么

编辑


由于很多读者发现我的问题不清楚,请看下面的两个答案,这是我一直在寻找的解决方案
ex(a,b)
是按顺序使用
a
b
的长代码块的缩写。我不想定义函数的原因主要是风格上的,超出了这个问题的范围。

这里有一种方法:

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()));
向量v={a,b}; 做{ ex(v[0],v[1]); }while(下一个置换(v.begin(),v.end()); 或:

向量v={a,b}; 对于(自动i:{0,1}) ex(v[i],v[(i+1)%2]);
如果元素总是被索引为0和1(例如在向量v中),那么您可以使用exclusive or
^
来选择替代索引:

for(auto i: {0, 1})
    ex(v[i], v[i ^ 1]);

我认为最简单的方法是直接不使用for循环。这个for循环如何比两次调用
ex
更好?或者一个包含两个参数的函数调用两次
ex
?使用
.first
.second
访问每个元素?“不接受定义函数计算ex”-为什么不?另外,你能提供一些实际的代码吗?很难想象你到底想完成什么。Ehm编写一个函数,调用两次
ex
?使用lambda或函子捕获上下文。
for(auto i: {0, 1})
    ex(v[i], v[i ^ 1]);