|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.05.2017, 18:14 | #1 |
Заблокирован
Регистрация: 11.11.2016
Сообщений: 261
|
Беззнаковые целые как индексы массива в цикле
Мне нужно реализовать вставку элемента в динамический массив по заданному индексу, для этого я сдвигаю вправо все элементы, начиная с этого индекса, и после этого в заданную позицию вставляю нужные данные. Все индексы должны быть беззнаковыми целыми, и всвязи с этим возникла проблема остановки цикла:
Код:
Условие цикла i >= _index никогда не выполняется из-за того, что int без знака. Как можно исправить эту проблему? |
16.05.2017, 19:07 | #2 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 742
|
Почему не выполнится, если должно выполнится? size_t - это же по-моему int тот же самый, ну а почему не выполняется-то? Замените тип i на unsigned int. И в условии я бы заменил ">=" на просто ">".
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
|
16.05.2017, 19:59 | #3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
У вас, кроме всего прочего, выход за пределы массива.
Начинайте от size() - 1 повторяйте до i > index + 1 Сдвиг делайте так: elem[i] = elem[i - 1] |
16.05.2017, 20:27 | #4 |
Заблокирован
Регистрация: 11.11.2016
Сообщений: 261
|
Переписал вот так:
Код:
Код:
Последний раз редактировалось Aoizora; 16.05.2017 в 20:33. |
18.05.2017, 13:57 | #6 |
Заблокирован
Регистрация: 11.11.2016
Сообщений: 261
|
>std::size_t i = size() - 1;
Вот насчет этого выражения у меня сомнения. Мой вектор устроет так: есть динамический массив elements, состоящий из элементов произвольного типа, указатели этого типа first_free на первый свободный элемент и cap на конец массив. Размер вектора вычисляется как first_free - elements, емкость как cap - elements. Увеличение размера вектора происходит автоматически при выполнении некоторых операций, когда size() == capacity(). Теперь об индексах. При перемещении элементов вправо, мне кажется, надо сначала занимать позицию, на которую указывает указатель first_free, сдвигать все элементы до _index включительно, а на место _index ставить новый элемент. |
18.05.2017, 14:06 | #7 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Я думаю, что в итоге будет так:
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[Прошу помощи]Индексы массива | Romalikons | Общие вопросы C/C++ | 4 | 12.10.2014 16:27 |
Напечатать индексы элементов массива | Dark Illusion | Общие вопросы C/C++ | 1 | 15.12.2012 17:33 |
Обработка массива в цикле | marauder1919 | Общие вопросы C/C++ | 3 | 10.08.2012 19:28 |
на Си++ описать длинные беззнаковые целые числа | Alisa91 | Помощь студентам | 0 | 05.12.2011 19:54 |