将现有数组的所有值设置为"幻数"

时间:2015-08-07 15:26:58

标签: c++ arrays magic-numbers

所以我知道我可以将数组的每个值设置为"幻数" (在这种情况下是一个魔术字符串)在构造时像;

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

如果我可以声明我的数组,那么有用的是什么;

string * myArray[100];

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

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

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

我明白魔法数字(或魔术字符串)并不好。然而,我工作的系统是CERN的根,它充满了有趣的怪癖,我宁愿不再浪费时间寻找更整洁的方法。所以为了不让perfect become the enemy of the good我要使用魔法数字。

这里最快的选择是什么?

编辑;接受的答案适用于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 个答案:

答案 0 :(得分:3)

虽然内置数组不允许聚合分配,但testing(data);允许您这样做:

std::vector

Demo.

这种方法有几个优点:

  • 语法紧凑直观
  • 允许分配的聚合具有不同的长度
  • 自动释放分配给vector<string> data; if (someCondition) { data = {"quick", "brown", "fox"}; } else { data = {"jumps", "over", "the", "lazy", "dog"}; } 的资源。

答案 1 :(得分:2)

我认为你可能意味着一个std::string数组,而不是像std::string*这样的数组:

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

我这样做的方法是允许std::vector为我管理数组。这使我可以在以后轻松复制,移动或交换新值:

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

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