如何从以下输出中分别访问每个组

时间:2018-06-17 03:58:43

标签: c++ c++11

下面是代码使用向量将N大小的数组划分为M个大小的组。但我的问题是,我想单独访问每个组。怎么做??

#include <iostream>
#include <iomanip>
#include <vector>
#include <numeric>
using namespace std;

template<typename T>
std::vector<std::vector<T>> split(const std::vector<T>& vec, size_t n)
{
std::vector<std::vector<T>> outVec;

size_t length = vec.size() / n;
size_t remain = vec.size() % n;

size_t begin = 0;
size_t end = 0;

for (size_t i = 0; i < std::min(n, vec.size()); ++i)
{
    end += (remain > 0) ? (length + !!(remain--)) : length;

    outVec.push_back(std::vector<T>(vec.begin() + begin, vec.begin() + end));

    begin = end;
}

return outVec;

}

#define Nsta 30
#define NGroups 5

int main(void)
{
std::vector<uint64_t> vector(Nsta);
std::iota(std::begin(vector), std::end(vector), 0);

std::vector<std::vector<uint64_t>> vecs(NGroups);
vecs = split(vector, NGroups);


for (uint64_t m = 0; m < vecs.size(); ++m) 
{
    for (auto i : vecs[m])
    {
        std::cout << i << " ";
    }
std::cout << std::endl;
}

 return 0;
}

输出:

1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30

请帮助我!!

1 个答案:

答案 0 :(得分:0)

我记得你之前也问了这个问题,当时我评论说你想要的输出不清楚 我建议你编辑你的问题,并在“所需的输出”上添加几行。 直到时间不清楚,没有人能够提供帮助 我已经了解了你的问题。

“但我的问题是,我想单独访问每个群组。怎么做?”

根据我的理解,您希望在拆分后单独访问每个组 您的程序已经描述了正确的逻辑 在此之后我不确定你需要什么。

所以我重构了你的代码,以便更好地理解。希望它有所帮助。

你的分裂逻辑是正确的。 在拆分原始数据后,它将返回多个组。

Twig_Extension

template<typename T> std::vector<std::vector<T>> split(std::vector<T> const & vec, size_t n) { std::vector<std::vector<T>> outVec; size_t length = vec.size() / n; size_t remain = vec.size() % n; size_t begin = 0, end = 0; for (size_t i = 0; i < std::min(n, vec.size()); ++i) { end += (remain > 0) ? (length + !!(remain--)) : length; outVec.push_back(std::vector<T>(vec.begin() + begin, vec.begin() + end)); begin = end; } return outVec; } 我已经重命名了一些变量并修改了代码结构以便更好地理解 您想识别每个并使用它。

main()

这就是如何设计一个适用于组的功能。

int main(void)
{
    int const Nsta = 34;
    int const NGroups = 5;
    std::vector<uint64_t> data(Nsta);
    std::iota(data.begin(), data.end(), 0);

    // split function takes data and the number of groups to be made
    auto groups = split(data, NGroups);

    // we can extract each `group` from the `groups`, and use it as per our need
    for (auto const & group : groups)
    {
        // group contains a single group
        // it can be passed to another function, such as print_group, etc.
        print_group(group); 
    }
    return 0;
}