是否有单线(或简单的无环路)解决方案来解交错 vector 的奇数和偶数条目?
示例:
long entries[] = {0,1,2,3,4,5,6,7};
std::vector<long> vExample(entries, entries + sizeof(entries) / sizeof(long) );
vExample.intertwine(vExample.begin(),vExample.end()); // magic one liner I wish existed...
for (int i = 0; i < vExample.size(); i++)
{
std::cout << vExample[i] << " ";
}
现在我想要以下输出:
0 2 4 6 1 3 5 7
最佳答案
你好像在找std::partition
或 std::stable_partition
,取决于您是否需要保留元素的顺序:
#include <iostream>
#include <algorithm>
#include <vector>
int main () {
std::vector<int> vals {0,1,2,3,4,5,6,7};
std::stable_partition(begin(vals), end(vals), [](auto i){return !(i % 2);});
for (auto v : vals)
std::cout << v << " ";
}
输出:0 2 4 6 1 3 5 7
。看吧live .
当然,您可以通过更改谓词按任何其他标准进行分区。
关于c++ - 去交错 vector C++ 的奇数和偶数条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33785868/