c инициализировать массив структур структур - PullRequest
0 голосов
/ 28 октября 2019

У меня есть 2 структуры, путь и пути. Затем определите массив путей для хранения моих данных:

enum MAX_NEIGHBOR {MAX_NEIGHBOR = 256};
enum MAX_NUM_PATHS {MAX_NUM_PATHS = 100};

typedef struct {
    int id;
    int path[MAX_NEIGHBOR];
} path;

typedef struct {
    int id;
    path pathsIKnow[MAX_NUM_PATHS];
} paths;

paths pathsIKnow[MAX_NEIGHBOR];

В настоящее время я инициализирую массив в большом цикле во время выполнения, что занимает слишком много времени. Есть ли способ, которым я могу инициализировать это без цикла, например, во время определения массива путей?

Текущий код цикла:

void initKnownPaths() {
    for(int j=0;j<MAX_NEIGHBOR;j++){
        paths pathsToI = pathsIKnow[j];
        pathsToI.id = 999;

        for(int i=0 ;i < MAX_NUM_PATHS;i ++){
            path pathToupdate = pathsToI.pathsIKnow[i];
            pathToupdate.id = 999;
            for(int j=0 ;j < MAX_NEIGHBOR;j++){
                int cPathValue = pathToupdate.path[j];

                cPathValue = 999;
                pathToupdate.path[j] = cPathValue;
            }

            pathsToI.pathsIKnow[i] = pathToupdate;
            pathsIKnow[j] = pathsToI;

        }
    }
}

Спасибо!

1 Ответ

1 голос
/ 28 октября 2019

Если вы компилируете с использованием GCC, то вместо функции initKnownPaths вы можете заменить структурную переменную pathsIKnow типа struct paths следующим:

paths pathsIKnow[MAX_NEIGHBOR] =
{
  [0 ... MAX_NEIGHBOR - 1] =
  {
    999,
    {
      [0 ... MAX_NUM_PATHS - 1] =
      {
    999,
    {
[0 ... MAX_NEIGHBOR - 1] = 999}}}}};

Если вы не используете GCC,тогда вам следует улучшить существующую функцию, основываясь на предложениях @ 1201ProgramAlarm

Примечание: Если вы используете первый метод, размер вашего скомпилированного двоичного файла увеличится, однако это должносократить время выполнения. ( компромисс между временем и пространством !! )

Ссылки :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...