Допустим, у меня есть 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
?
Спасибо!
Я никогда не использовал 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;
}
Код одинаков для вектора, списка и т. Д.
Если ваши данные отсортированы таким образом, как в примере, вы можете просто зациклить с шагом 3 и скопировать первые два байта. В противном случае вы не сможете выполнить цикл для каждого значения.