Дополнительный вариант вы могли бы сделать, чтобы избежать использования массива в целом, обращаясь к цифре номера непосредственно:
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;
}
Это позволяет рассматривать ваш номер как массив без фактической инициализации массива. Вы можете даже превратить это в класс и использовать перегрузку оператора для получения фактической семантики массива.
Есть ли причина, вы не используете зЬй :: вектор? Размеры массива должны быть постоянными времени компиляции. Вы теперь размер во время компиляции или только во время выполнения? –
'int myarr [runtime_value]' является расширением VLA, предпочитаем использовать 'std :: vector' в любом случае. – Jarod42
Я просто хотел узнать, можно ли как-то динамически присваивать размер целого числа с помощью siezof() или что-то подобное? Я знаю, что есть std :: vector, но я хочу этого избежать. –