Так что я знаю, что я могу установить каждое значение массива в «магическое число» (в данном случае магическую строку) во время создания подобно;
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
}
Хотя встроенные массивы не разрешают совокупные назначения, std::vector
позволяет вам сделать это:
vector<string> data;
if (someCondition) {
data = {"quick", "brown", "fox"};
} else {
data = {"jumps", "over", "the", "lazy", "dog"};
}
Этот подход имеет несколько преимуществ:
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"};