Установите все значения существующего массива в "магические числа"

Итак, я знаю, что я могу установить каждое значение массива в "магическое число" (в данном случае магическую строку) во время создания подобно;

string * myArray[] = {"foo", "bar", "baz"};

Что было бы полезно, если бы я мог объявить свой массив;

string * myArray[100];

Затем позже (в операторе if) установите его значения;

myArray = {"foo", "bar", "baz"};

(реальный массив будет содержать ~30 магических строк, поэтому я не хочу назначать их все по одной)

Я понимаю, что магические числа (или магические строки) не годятся. Однако система, в которой я работаю, является корнем CERN, которая полна интересных эксцентричностей, и я бы предпочел не терять больше времени на поиск более аккуратного подхода. Поэтому, чтобы не позволить совершенству стать врагом добра, я собираюсь использовать магические числа.

Какой самый быстрый вариант здесь?

Редактировать; Принятый ответ отлично работает для C++11. Если, как и у меня, у вас нет такой возможности, вот очень неприятное, но функциональное решение. (Программисты с чувствительностью, пожалуйста, защитите свои глаза.)

int numElements;
vector<char *> myArray;
if(someCondition){
  numElements = 3;
  string * tempArray[] = {"foo", "bar", "baz"}]
  for(int n = 0; n < numElements; n++){
    const char * element = (tempArray[n]);
    myArray.push_back(element);
  }
}else if(anoutherCondition){
//More stuff
}

2 ответа

Решение

Хотя встроенные массивы не разрешают совокупные назначения, std::vector позволяет вам сделать это:

vector<string> data;
if (someCondition) {
    data = {"quick", "brown", "fox"};
} else {
    data = {"jumps", "over", "the", "lazy", "dog"};
}

Demo.

Этот подход имеет несколько преимуществ:

  • Синтаксис компактен и интуитивно понятен
  • Назначенные агрегаты могут иметь различную длину
  • Ресурсы, выделенные для std::vector освобождаются автоматически.

Я думаю, что вы, вероятно, имеете в виду массив std::string а не массив std::string* как это:

std::string myArray[] = {"foo", "bar", "baz"};

Я бы сделал так, чтобы std::vector управлять массивом для меня. Это позволяет мне позже легко копировать, перемещать или менять новые значения:

std::vector<std::string> myVector = {"foo", "bar", "baz"};

myVector = {"wdd", "ghh", "yhh"};
Другие вопросы по тегам