将现有数组的所有值设置为“魔术数字”
Set all values of an existing array to "magic numbers"
所以我知道我可以在构造时将数组的每个值设置为一个"幻数"(在本例中是一个幻字符串),如;
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"};
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 如何在C++中避免魔术字符串和魔术数字
- For循环-魔术数字程序
- 家庭作业:避免魔术数字
- 将现有数组的所有值设置为“魔术数字”