Установите для всех значений существующего массива «магические числа»

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

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
}

3

Решение

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

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

Demo.

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

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

Другие решения

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

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

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

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

myVector = {"wdd", "ghh", "yhh"};
2

По вопросам рекламы [email protected]