memcpy等效于在复制时跳过x字节(不仅仅是初始x字节)?

时间:2016-09-27 08:00:13

标签: c++ boost stl

我正在寻找一个类似于memcpy的现有函数,可以告诉他复制 x 字节,然后跳过 y 字节,重复直到指定的数量为止被复制了。

想象一下包含数据的缓冲区:AABAAB(我使用了字符,但我操作的数据不是字符串数据)。

当应用于此缓冲区并被告知复制2个字节并跳过1个字节时,目标缓冲区将包含:AAAA

我还没有找到任何关于STL和Boost的内容,但我希望其中有一些我错过了。

或许还有一种聪明(而不是讨厌)的方法,可以使用更常见的功能来实现同样的目标。

2 个答案:

答案 0 :(得分:2)

您可能需要查看boost::adaptors::strided

你可能会写这样的东西:

boost::copy(boost::make_iterator_range(in, in+size) | boost::adaptors::strided(2), out);

虽然这会产生大量的程序集,但编译器似乎也可以完全内联:compiler explorer example

要删除每个第n个元素,您还可以使用不允许每个第n个元素的谓词来求boost::adaptors::filteredstrided执行相反的操作,保持每个第n个元素):< / p>

char const* input = "AABAAB";

unsigned counter{};
auto pred = [&counter](auto const&){ return ++counter % 3; };
boost::copy(boost::make_iterator_range(input, input+strlen(input)) | boost::adaptors::filtered(pred),
            std::ostream_iterator<char>(cout));

live example;

答案 1 :(得分:0)

似乎没有直接相当于memcpy来做我想要的事情。 Boost似乎经常有一些有用的辅助函数,但我最终实现了一个简单的循环函数来完成这项工作,因为它似乎是最简单的&amp;适当的解决方案。