Код: Выделить всё
function outputWaveform=Interleave3(a, b, c)
outputWaveform=zeros([1 3*length(a)]);
outputWaveform(1:3:end)=a(:);
outputWaveform(2:3:end)=b(:);
outputWaveform(3:3:end)=c(:);
< /code>
Это моя первая попытка C ++ STL: < /p>
typedef vector dVector;
typedef vector::iterator dVectorIT;
dVector Interleave3(dVector a, dVector b, dVector c)
{
dVector result(0, 3*a.size());
dVectorIT aIT=a.begin(), bIT=b.begin(), cIT=c.begin(), rIT=result.begin();
for(; aIT != a.end(); ++aIT, ++bIT, ++cIT)
{
*rIT++=*aIT;
*rIT++=*bIT;
*rIT++=*cIT;
}
return result;
}
< /code>
работает, но есть ли лучший способ сделать это? Я надеялся, что может быть какой -то умный способ сделать это в одной линии с [b] transform () [/b]. Можете ли вы добавить B в A, затем C в A, затем преобразовать временный «A1A2A3 ...- B1B2B3 ...- C1C2C3 ...» вектор в «A1B1C1A2B2C2A3B3C3 ...»? Решение Matlab довольно простое: < /p>
function [a, b, c]=Deinterleave3(outputWaveform)
a=outputWaveform(1:3:end);
b=outputWaveform(2:3:end);
c=outputWaveform(3:3:end);
Код: Выделить всё
typedef vector dVector;
typedef vector::iterator dVectorIT;
void Deinterleave3(dVector outputWaveform, dVector &a, dVector &b, dVector &c)
{
ASSERT( !(outputWaveform.size()%3) );
a.clear(); b.clear(); c.clear();
dVectorIT oIT=outputWaveform.begin();
for(; oIT != outputWaveform.end(); )
{
a.push_back( *oIT++ );
b.push_back( *oIT++ );
c.push_back( *oIT++ );
}
}
Код: Выделить всё
Подробнее здесь: https://stackoverflow.com/questions/361 ... s-in-c-stl