gpt4 book ai didi

c++ - 遍历多个 vector ,在n个元素后执行操作

转载 作者:太空狗 更新时间:2023-10-29 20:22:00 27 4
gpt4 key购买 nike

我有几个 std::vector,我需要一个接一个地迭代它们,这样我就可以执行自定义操作,考虑第一组 N 个元素,然后是第二组N 个元素的集合,依此类推,直到最后一个 vector 的最后一个元素。

一种可能的方法是将每个 vector 复制到一个更大的 vector 中(例如有 2 个输入 vector ):

void foo(const vector<int>::iterator& it, const vector<int>::iterator& it2)
{
}

void iterate(const vector<int>& a, const vector<int>& b, int n)
{
vector<int> c = a;
c.insert(c.end(), b.begin(), b.end());

int i, j, len = c.size();

for (i = 0, j = 0; i < len; i++)
{
if (i > 0 && i % n == 0)
{
// custom operation from c.begin() + j to c.begin() + i
foo(c.begin() + j, c.begin() + i);
j = i;
}
}

if (i % n != 0)
{
// custom operation from c.begin() + j to c.end()
foo(c.begin() + j, c.end());
}
}



vector<int> a(100), b(50);
iterate(a, b, 32);

但是这种方法需要额外的 vector 分配,可能会很大。有没有一种方法可以尽可能快地执行相同的操作,而不需要额外的 vector ?

最佳答案

range-v3 ,它只是:

void iterate(const std::vector<int>& a, const std::vector<int>& b, int n)
{
auto r = ranges::view::concat(a, b) | ranges::view::chunk(n);
for (const auto& e : r | ranges::view::bounded) {
foo(e);
}
}

Demo

for-range 可用于 c++17。

关于c++ - 遍历多个 vector ,在n个元素后执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39956005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com