Почему при добавлении чисел в вектор выводятся нули?
Я пишу функцию для переноса цифр разрядов числа в вектор. В функции на 15 строке вводятся числа в начало вектора, но выводятся только нули. Если я напишу push_back(), то всё нормально, кроме того, что вектор задом наперед.
Вот код:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<int> sum_function(int n ) {
vector<int> v;
int number_now = 0, number_previous = 0;
for (int i = 1; i < 3; i++)
{
int degree = pow(10, i);
number_now = (n % degree - number_previous)/pow(10,i-1);
number_previous = number_now;
v.insert(v.begin(), number_now); //15 строчка
}
return v;
}
int main() {
vector <int> data;
data = sum_function(324);
for (int i = 0; i < 3; i++)
{
cout << data[i] << endl;
}
Ответы (1 шт):
Нормально выводит. Только вместо 3 цифр выводит 2, потому что у вас цикл обрабатывает всего 2 цифры. Т.е. в вектор попадает только 2 и 4.
for (int i = 1; i < 3; i++) // только 2 цифры
{
И из-за этого, в цикле в main() вы выходите за пределы массива.
Для просто перебора всех элементов массива (вывод на экран) лучше использовать
for(const x : data)
cout << x << " ";
// или
for(int i=0; i< data.size(); ++i)
cout << data[i] << " ";
Ещё у вас не самый удачный алгоритм получения цифр. В вашем случае нужно заранее знать разрядность чисел. А можно сделать всё проще:
vector<int> sum_function(int n )
{
vector<int> v;
v.reserve(10); // заранее резервируем место, чтобы не было переаллокаций
while(n) // пока число больше нуля
{
int number = n % 10; // последняя цифра
n /= 10; // число без последней цифры
v.push_back(number);
}
reverse( v.begin(), v.end() );
return v;
}
На самом деле добавлять элементы в конец вектора и потом один раз вызвать reverse() выгоднее, чем добавлять элементы в начало вектора. Уже на числах из 4 разрядов получается, что вставка в начало сделает 3 копирования шести элементов, а реверс сделает всего 2 свопа. И чем больше разрядов в числе, тем разница будет больше и больше.