c++ - 去交错 vector C++ 的奇数和偶数条目

标签 c++ vector

是否有单线(或简单的无环路)解决方案来解交错 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::partitionstd::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/

相关文章:

c++ - 如何使用最新的 MinGW 将 qmake 设置为 C++14?

c++ - 用 t 个随机数生成位 vector

python - 什么是 Python 的列表[ :x] in C++? 的等价物

c++ - erase-remove_if 习语 - 有什么东西被删除了吗?

c++ - 不能(隐式地)从 char** 转换为 const char**?

c++ - "fast"或 "normal"在 "free(): invalid next size (fast)"中是什么意思?

c++ - g++ ld 找不到 x86_64 架构的 RInside 符号

c++ - 合并一个类的两个数组

c++ - 将两个不同长度的 vector 根据各自包含全局地址的索引 vector 拼接到具有推力的共同长度的新 vector

r - R中非空数值向量的维数