重新排列int vector c ++函数

时间:2017-01-14 13:23:58

标签: c++ function vector

您好我有以下std :: vector:

std::vector<int> source ={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

我想要将它改组,以便对于给定的数字,例如n = 4就是这样的输出向量:

std::vector<int> output = {3,2,1,0,7,6,5,4,11,10,8,9,15,14,13,12}

任何想法应该是什么功能?

1 个答案:

答案 0 :(得分:2)

正如Lightness Races in Orbit在评论中所说,可以通过一点点努力就可以使用标准算法函数来完成。

using vector_size_t = std::vector<int>::size_type;

std::vector<int> source = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
std::vector<int> result = source;

vector_size_t source_size = source.size();
vector_size_t group_size = 4;

for(vector_size_t i = 0; i < source_size / group_size; ++i)
{
    std::reverse
    (
        std::next(std::begin(result), i * group_size),
        std::next(std::begin(result), std::min((i + 1) * group_size, source_size))
    );
}