将现有数组的所有值设置为 "magic numbers"
Set all values of an existing array to "magic numbers"
所以我知道我可以在构造时将数组的每个值设置为 "magic number"(在本例中为魔术字符串);
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
}
尽管内置数组不允许聚合赋值,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"};
所以我知道我可以在构造时将数组的每个值设置为 "magic number"(在本例中为魔术字符串);
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
}
尽管内置数组不允许聚合赋值,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"};