Массив Int в контейнер C ++ - PullRequest
0 голосов
/ 20 января 2020

У меня есть некоторые данные, поступающие из источника в массиве int. По существу ..

// C interface
typedef struct {
    int payload[1024];
    int id;
} tData;

// C++ interface
void MyModule::HandleData(tData *data){
   this->DoUsefulThingsWithData(data->payload);
}

Это из файла C, написанного в функциональном стиле. Теперь я хочу взять эти данные и использовать их в моем модуле C ++. Я собираю все это в вектор, или я должен просто продолжать использовать данные как есть? Если я использую вектор, мне не нужно передавать размер DoUsefulThingsWithData, но стоит ли это накладных расходов? Также я точно не знаю, когда эти данные станут неактуальными (область действия или освобождаются), поэтому я должен скопировать их во что-то, прежде чем продолжать использовать. Каков наилучший контейнер для этого с наименьшими накладными расходами на производительность (копирование) и размер? Примечание: я в с ++ 98

Ответы [ 2 ]

1 голос
/ 20 января 2020

... поэтому я должен скопировать его во что-нибудь, прежде чем продолжать использовать.

Если я использую вектор ... но стоит ли это накладных расходов?

Накладные расходы по сравнению с чем? std::vector является идеальным стандартным контейнером для этого варианта использования.

Тем не менее, вероятно, лучше всего позволить реализации DoUsefulThingsWithData выбрать способ хранения данных, если это то, что делает функция.

Если я использую вектор, мне не нужно передавать размер в DoUsefulThingsWithData

Вам также не нужно передавать размер, если вы используете ссылку на массив как тип аргумента. Я рекомендую это.

1 голос
/ 20 января 2020

Я упаковываю все это в вектор?

Да:

std::vector payload(tData.payload, tData.payload + sizeof(tData.playload));

Если я использую вектор, мне не нужно передать размер в DoUsefulThingsWithData.

Просто используйте vector s data() функцию-член:

this->DoUsefulThingsWithData(payload.data());
...