Эффективный способ реорганизации данных в буфере в переполнении стека

Допустим, у меня есть 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

Есть ли эффективный способ сделать это, кроме циклического прохождения каждого элемента? Есть ли какой-то трюк, с которым вы можете сделать memcpy или же memset?

Спасибо!

-1

Решение

Я никогда не использовал 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;
}

Код одинаков для вектора, списка и т. Д.

0

Другие решения

Если ваши данные отсортированы таким образом, как в примере, вы можете просто зациклить с шагом 3 и скопировать первые два байта. В противном случае вы не сможете выполнить цикл для каждого значения.

0

По вопросам рекламы [email protected]