将现有数组的所有值设置为“魔术数字”

Set all values of an existing array to "magic numbers"

本文关键字:魔术 数字 魔术数字 数组 设置      更新时间:2023-10-16

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

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

如果我可以声明我的数组;

string * myArray[100];

然后(在if语句中)设置其值;

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

(实际数组将包含~30个魔术字符串,所以我不想一次只分配一个)

我明白幻数(或幻字符串)不好。然而,我正在研究的系统是欧洲核子研究中心的根,它充满了有趣的怪癖,我不想再浪费时间去寻找一个更整洁的方法。因此,为了不让完美成为优秀的敌人,我将使用神奇的数字。

这里最快的选择是什么?

编辑;公认的答案适用于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"};