C++ 将现有数组的所有值设置为";“幻数”;

C++ 将现有数组的所有值设置为";“幻数”;,c++,arrays,magic-numbers,C++,Arrays,Magic Numbers,所以我知道我可以在构建时将数组的每个值设置为一个“幻数”(在本例中是一个幻数字符串),如 string * myArray[] = {"foo", "bar", "baz"}; 如果我可以声明我的数组,那将是有用的 string * myArray[100]; 然后稍后(在if语句中)设置其值 myArray = {"foo", "bar", "baz"}; (实际数组将包含约30个魔法字符串,因此我不希望一次将它们全部分配给一个) 我知道魔术数字(或魔术字符串)并不好。然而,我工作的系统

所以我知道我可以在构建时将数组的每个值设置为一个“幻数”(在本例中是一个幻数字符串),如

string * myArray[] = {"foo", "bar", "baz"};
如果我可以声明我的数组,那将是有用的

string * myArray[100];
然后稍后(在if语句中)设置其值

myArray = {"foo", "bar", "baz"};
(实际数组将包含约30个魔法字符串,因此我不希望一次将它们全部分配给一个)

我知道魔术数字(或魔术字符串)并不好。然而,我工作的系统是CERN的根,它充满了有趣的怪癖,我宁愿不要再浪费时间寻找更整洁的方法。所以为了不让你失望,我打算用幻数

这里最快的选择是什么

编辑;被接受的答案对于c++11非常有用。如果,像我一样,你没有这个选择,这里有一个非常讨厌但实用的解决方案。(有敏感度的程序员请遮住眼睛。)

int元素;
矢量阵列;
如果(某些条件){
数量=3;
string*tempArray[]={“foo”、“bar”、“baz”}]
对于(int n=0;n
尽管内置数组不允许聚合分配,但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"};
std::vector myVector={“foo”、“bar”、“baz”};
myVector={“wdd”、“ghh”、“yhh”};

为什么不使用向量?为什么指向Strings的指针可以这样做,但这有帮助吗?我们仍然不能设置像
={“foo”,“bar”,“baz”}
我想?那不能编译你的意思是
std::string myArray[]={“foo”,“bar”,“baz”}?如果需要静态数组,请使用
std::array
;如果需要动态数组,请使用
std::vector
。C++ C++中的C++原始数组已经不再有用了。我从这里接收到一个错误,它的长度很长,所以它在问题的底部。@ Jekowl需要编译为(至少)C++ 11。@ JekOWL。该语法在C++ 11和C++ 14中可用,因此可能需要在编译器中打开一个特殊标志(假设编译器支持C++ 11或更高)。@zenith啊,那可能不可能。我将把这个问题留待更长的时间,看看是否有其他的建议,然后接受这个答案,以方便将来的读者。你能用三元(?:)运算符来替换赋值吗?
std::vector<std::string> myVector = {"foo", "bar", "baz"};

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