2014-09-18 3 views
-1

объявляя mArrayTempлучший способ сравнить массив?

struct _ARRAY_DATA 
{ 
    int nCode; 
    short sDuration; 
    short sCount; 
}; 

_ARRAY_DATA mArrayTemp[400]; 

mArrayReal уже содержит некоторые данные, позволяет скопировать этот

for(int i = 0; i < 400, ++i) 
{ 
    mArrayTemp[i].nCode = mArrayReal[i].nCode; 
    mArrayTemp[i].sDuration = mArrayReal[i].sDuration; 
    mArrayTemp[i].sCount = mArrayReal[i].sCount; 
} 

//then we do something here 

для следующего этапа, что является лучшим эффективным способом для сравнения двух массивов mArrayTemp и mArrayReal, чтобы убедиться, что они до сих пор и то же, и что ничто не изменилось во время некоторого кода?

+4

Почему используется 'C array', а не' std :: vector'. Вы избегаете реализации большого количества кода, копирования, управления памятью, сравнения и т. Д. – NetVipeC

+0

Согласен, это можно сделать ОЧЕНЬ легким и чистым с помощью вектора –

+0

Вы также можете предоставить 'operator =' и 'operator ==' на '_ARRAY_DATA'. – Jarod42

ответ

1
if (memcmp(mArrayTemp, mArrayReal, sizeof(mArrayTemp) == 0) 
{ 
    //they have the same values 
} 
+5

Лучше убедитесь, что у вас нет прокладки для этого решения. – nwp

+0

он будет работать, если он скопирован с помощью memcpy – SHR

+0

. Вы можете заставить значение struct pack равным 1 для массива, чтобы избежать заполнения. –

0

memcmp не лучший способ для сравнения двух массивов. Используйте std::equal. Я особенно предпочитаю использовать Boost.Range, чтобы хорошо относиться к целым коллекциям, и он предоставляет форму equal.

if (equal(mArrayTemp, mArrayReal)) { ⋯ 

Не беспокойтесь о заполнении, поскольку компилятор выполнит правильные действия. Это не конец для любого типа знаний, таких как memcmp.

Смежные вопросы