2016-09-20 3 views
0

У меня есть массив _data, и я пытаюсь добавить число в массив с определенным position. Каждое число после индекса position должно быть сдвинуто на один индекс вправо. У меня возникли проблемы с концепцией этого.Сдвиг элементов справа после определенного индекса

Это то, что у меня как сейчас:

void list::add(int num, size_t position) 
{ 
    for (int i = 0; i < _size; i++) 
    { 
    _data[position + i + 1] = _data[position + i]; 
    } 
_data[position] = num; 
} 

Например, скажем, Num = 9 и положение = 3 и данные значения в массиве {1, 3, 4, 5, 6, 7}. Я бы хотел, чтобы это было {1, 3, 4, 9, 5, 6, 7}. Однако в конечном итоге происходит захват числа, которое уже было заменено, и помещает его обратно в массив. (Например 1, 3, 4, 9, 5, 5, 5}

+0

Сдвиг правого первого – Danh

+2

Используйте небольшой массив, скажем, только с двумя элементами. Возьмите лист бумаги. Используя карандаш, нарисуйте два квадрата и положите «1» и «2» внутри каждого квадрата. Это ваш массив с двумя значениями. Теперь пройдите через свой код, по одной строке за раз, и обновите каждое значение в массиве на бумаге, как именно это делает ваш код. Вы должны быть в состоянии легко понять, где вы поступили не так. –

ответ

0

Это зависит от типа вашей переменной _data:.

Если это массив:

for (std::size_t i = _size - 1; i != position; --i) 
{ 
    _data[i] = _data[i - 1]; 
} 
_data[position] = num; 

Если это вектор:

_data.insert(_data.begin() + position, num); 

Во всяком случае, рекомендуется использовать std::vector вместо необработанного массива, и НЕ рекомендуется использовать знак подчеркивания в начале имени переменной