下面是代码使用向量将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
请帮助我!!
答案 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;
}