在c++中重组缓冲区中数据的有效方法

Efficient way to reorganize data in a buffer in C++

本文关键字:有效 数据 方法 缓冲区 c++ 重组      更新时间:2023-10-16

假设我有一个unsigned char缓冲区,它看起来像这样:

unsigned char buffer = {'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'}

基本上我只想把A和B放在一个新的缓冲区中,像这样:

unsigned char buffer2 = {'A', 'B', 'A', 'B', 'A', 'B'  ... etc

除了循环遍历每个元素之外,是否有更有效的方法来做到这一点?对于memcpymemset有什么技巧可以做吗?

谢谢!

我从来没有使用过memcpy,但是我想这样做:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
class Modulo3
{
public:
    Modulo3();
    bool operator()(const char c);
private:
    int num_;
};
Modulo3::Modulo3()
{
    num_ = 0;
}
bool Modulo3::operator()(const char c)
{
    return num_++ % 3 == 0;
}
int main()
{
    string test = "ABCABCABC";
    Modulo3 func;
    remove_if(test.begin(),test.end(),func);
    return 0;
}

对于vector、list等,代码是相同的

如果你的数据排序的方式在例子中,你可以只是循环递增3和复制前两个字节。否则你不需要对每个值都进行循环。