C ++中的动态数组大小

时间:2015-06-02 19:10:16

标签: c++ arrays dynamic int sizeof

我正在寻找一种根据传递的参数动态设置整数数组大小的方法。 例如,这是伪代码:

int MyFunction(int number)
{
  int myarr[amount of digits in number];
}

因此,当输入为13456时,int array[]大小应为5。 什么是在C ++中最快的方法,当我不知道大小的常量?

4 个答案:

答案 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?