我正在寻找一种根据传递的参数动态设置整数数组大小的方法。 例如,这是伪代码:
int MyFunction(int number)
{
int myarr[amount of digits in number];
}
因此,当输入为13456时,int array[]
大小应为5。
什么是在C ++中最快的方法,当我不知道大小的常量?
答案 0 :(得分:5)
您无法创建具有运行时大小的数组,必须在编译时知道它。我建议改为if true
。
一种解决方案是在转换为字符串后对字符进行计数
std::vector
在数学上,您可以使用日志(基数10)来查找数字中的位数。
#include <string>
int MyFunction(int number)
{
std::vector<int> myarr(std::to_string(number).size());
}
答案 1 :(得分:1)
您可以做的另一个选择是通过直接访问数字的数字来避免使用数组:
unsigned int getDigit(unsigned int number, unsigned int index) {
// See http://stackoverflow.com/questions/4410629/finding-a-specific-digit-of-a-number
}
unsigned int setDigit(unsigned int number, unsigned int index, unsigned int newVal) {
// intPower is from the question linked to above.
return number - get(number, index)*intPower(10, index) + newVal*intPower(10, index);
}
unsigned int size(unsigned int number) {
// See http://stackoverflow.com/questions/1306727/way-to-get-number-of-digits-in-an-int
}
unsigned int push_back(unsigned int number, unsigned int newDigit) {
// Assuming no overflow
return 10*number + newDigit;
}
unsigned int pop(unsigned int number) {
// Assume number != 0
return number / 10;
}
这使您可以将数字视为数组,而无需实际初始化数组。您甚至可以将其转换为类并使用运算符重载来获取实际的数组语义。
答案 2 :(得分:0)
您可以使用vector
- 实际上我认为在这种情况下是最佳选择。创建具有一些初始大小的向量。然后你可以动态增加它 -
int initialSize = 5;
vector<int> myvector(initialSize, 0); //hold "initialSize" int's
// and all initialized to zero
myvector[0] = 567; // assign values like a c++ array
答案 3 :(得分:0)
使用我的gcc版本4.6.3可以实现以下目标:
Max(SubmitTime)
编辑:C99这是有效的,请参阅:Array size at run time without dynamic allocation is allowed?