指摘されているように、速度の問題としてすでに分離されていない限り、これを手作業で最適化しようとするべきではありません。あなたが送信したコードから、より大きな問題があるように見えます。
配列にデータを入力すると、そもそも符号なし文字の配列またはベクトルからデータを入力しているように見えます。
m_ByteContainer.Content.resize(iByteCount);
memcpy(&m_ByteContainer.Content[0], &((unsigned char*)(m_pVoiceData))[iStartPos],iByteCount);
普通に書いた方がいいよ
typedef unsigned char uchar_t;
const uchar_t* voiceData = (uchar_t*)m_pVoiceData + iStartPos;
m_ByteContainer.assign(voiceData, voiceData + iByteCount);
そしてコンテナに最適化を心配させてください。
次のコードでは、for ループに懸念される定数があります。
double dblRes = 0;
for (int i = 0; i < 50; i++)
これまで見てきたコードから、どちらのコンテナにも 50 バイトあると考える理由はありません。これをわかりやすい名前の enum または const 変数にするか、m_ByteContainer または uTargetFeatureVector などのアクセサーを使用する必要があります。
// in the class:
const size_t MaxTargetFeatures = 50;
// in the code:
if (m_ByteContainer.empty() || m_byteContainer.size() < iStartPos)
return ...;
const size_t containerBytes = std::min(m_byteContainer.size() - MaxTargetFeatures, iStartPos);
const size_t vectorBytes = std::min(uTargetFeatureVector_Bytes.size(), MaxTargetFeatures);
const size_t maxCompare = std::min(containerEnd, vectorEnd);
const uchar_t* const begin = &m_ByteContainer[iStartPos];
const uchar_t* const end = &m_ByteContainer[iStartPos + maxCompare];
const uchar_t* feat = &uTargetFeatureVector_Bytes.Values[i];
for (const uchar_t* p = begin; p != end; ++p, ++feat)
{
if (*p != *feat)
dblRes += 1;
}
また、これが他の誰かのために取り組んでいるプロジェクトでない場合は、そのようなアプリとシステム表記を混在させるのはやめてください。Apps 記法では変数の前に、メンバーの前に「m_」を付けたり、増加する変数の場合は「countInput」を付けたりするなど、変数の役割/目的/種類を説明する情報を変数の前に付けます。変数、例えば「lpszPtr」。最新の IDE では、多かれ少なかれシステム表記が冗長になり、間違いなく、テンプレートとオーバーロードを伴う言語で、潜在的に危険です。