Если нужно добавлять/удалять элементы, надо делать список, длина которого заранее не известна.
добавлю еще - у списка есть важное преимущество - его очень легко сделать сортированным... например. для того чтобы вставить новый элемент по порядку возрастания - в массиве придется передвинуть все последующие элементы. а в списке достаточно переобределить связи всего двух ячеек
Но зато список занимает в памяти больше места, чем массив... ведь указатели на предыдущую ячейку надо где-то хранить
Список тем хорош, что сначала создается пустой, а потом, по мере надобности, растёт или уменьшается по желанию. т.е в разные моменты времени список имеет разное число элементов.
А вот массив - по определению должен быть строго того размера, которым его создали. Все остальные переопределения размера - от лукаваго Бейсика.
В 328ом контроллере 2К памяти. Не нужно там делать списки и динамические массивы. Меняйте концепцию работы с памятью. Без конкретики ничего не посоветую. Или ESP8266 ;)). Рекурсия на 2К памяти - не наш метод! ;))
ППС 32 строка - создаете новый, переписываете, старый удаляете?
Естественно
Тут я неправильно задал вопрос.
Чисто технически как правильно - создать временный, копировать в него, удалить "старый", создать "новый" с ТЕМ ЖЕ ИМЕНЕМ, копировать из временного , удалить временный - так куча дырок в памяти.
Или есть какая хитрость с именами, ведь дальше надо к "новому" обращаться по тому же имени, что и к "старому"?
// конструктор. принимает начальное число элементов массива
//
TArray(const uint8_t ASize) {
FItems = new T[FSize = ASize]; // первый раз запрашиваем память
if (FItems == NULL) goto err_exit;
Clear();
return;
err_exit:
// SendMessage(msg_OutOfMemory, 0, GetClassID());
;
}
Ресайзер
void SetNewSize(const uint8_t ANewSize) {
if (ANewSize <= FSize) return; // если размер такой же, или меньше то каковахрена?
if (FItems != NULL) {
T* tmpAprray = new T[ANewSize]; // временный массив
if (tmpAprray != NULL) { // если успешно распределили память, то
for (uint8_t i = 0; i < ANewSize; ++i) { // перенесём данные из старого в новый
if (i < FSize)
tmpAprray[i] = FItems[i];
else
tmpAprray[i] = T();
}
FSize = ANewSize;
delete[] FItems; // старый удалим
FItems = tmpAprray; // присвоим указателю адрес нового массива
}
}
}
надо делать список,
Сцуко, опять новое слово:)
Если нужно добавлять/удалять элементы, надо делать список, длина которого заранее не известна.
добавлю еще - у списка есть важное преимущество - его очень легко сделать сортированным... например. для того чтобы вставить новый элемент по порядку возрастания - в массиве придется передвинуть все последующие элементы. а в списке достаточно переобределить связи всего двух ячеек
Но зато список занимает в памяти больше места, чем массив... ведь указатели на предыдущую ячейку надо где-то хранить
Список тем хорош, что сначала создается пустой, а потом, по мере надобности, растёт или уменьшается по желанию. т.е в разные моменты времени список имеет разное число элементов.
А вот массив - по определению должен быть строго того размера, которым его создали. Все остальные переопределения размера - от лукаваго Бейсика.
В 328ом контроллере 2К памяти. Не нужно там делать списки и динамические массивы. Меняйте концепцию работы с памятью. Без конкретики ничего не посоветую. Или ESP8266 ;)). Рекурсия на 2К памяти - не наш метод! ;))
Рекурсия на 2К памяти - не наш метод! ;))
работает же... и быстро
Нинаю. String же втулили, работает, и порой даже неплохо. Чем не динамический массив?
ППС 32 строка - создаете новый, переписываете, старый удаляете?
Естественно
Тут я неправильно задал вопрос.
Чисто технически как правильно - создать временный, копировать в него, удалить "старый", создать "новый" с ТЕМ ЖЕ ИМЕНЕМ, копировать из временного , удалить временный - так куча дырок в памяти.
Или есть какая хитрость с именами, ведь дальше надо к "новому" обращаться по тому же имени, что и к "старому"?
Или есть какая хитрость с именами, ведь дальше надо к "новому" обращаться по тому же имени, что и к "старому"?
имя динамического массива - это отдельная переменная типа указатель, он вообще во всех этих "плясках" с удалением и копированием данных не участвует
Нинаю. String же втулили, работает, и порой даже неплохо. Чем не динамический массив?
Пока их суммарно на сотню букавак. ;)
Оффтоп. У меня есть знакомый с фамилией Хренов. Большой любитель воздушных шаров. У него визитка, на ней два слова.
Воздухоплаватель. Хренов.
То же о себе программист хренов))
То же о себе программист хренов))
Не расстраивайся, я тоже
Если при очередном пополнении вышел за макс. число элементов, то добавлять естес-сно не 1, а сразу 8-16. Код усложняется не намного
Моя практика говорит, что лучше не "на", а "в". Т.е. увеличивать массив не насколько-то элементов, а во сколько-то раз. Обычно полтора-два.
Моя практика говорит, что лучше не "на", а "в". Т.е. увеличивать массив не насколько-то элементов, а во сколько-то раз. Обычно полтора-два.
На ББ я бы так и сделал. Там я ёмкость сразу удваиваю.
realloc есть
realloc есть
я знаю. :)
тока, как я и подозревал использование
realloc
для указателя, возвращаемогоnew[]
, является неопределенным поведением.Клянчить уметь надо
realloc есть
Остался последний рывок - "памагите в кучу собрать"))
ПС Это шутка, если что...
Спасибо большое, но пока смотреть не стану, постараюсь сам... Потом сравню, ляпы свои найду.
Еще раз спасибо!
на шару тут тока радиолюбителям помогают, бо программисты из них никакие )))
на шару тут тока радиолюбителям помогают, бо программисты из них никакие )))
почему, я очень люблю порассуждать о схемах всяких... и совершенно бесплатно, ибо не секу в этом почти ничего :)))
на шару тут тока радиолюбителям помогают, бо программисты из них никакие )))
Что предлагаете? Зарегестрироваться под ником zl4yl, поставить женскую аватарку и заходить через VPN? Думаю тут такие ̶ ̶х̶и̶т̶р̶о̶ж̶о̶ умные уже были
Что предлагаете? Зарегестрироваться под ником zl4yl, поставить женскую аватарку и заходить через VPN? Думаю тут такие ̶ ̶х̶и̶т̶р̶о̶ж̶о̶ умные уже были
Вот зачем схему аферы раскрыли, теперь как попрут. )))
на шару тут тока радиолюбителям помогают, бо программисты из них никакие )))
поставить женскую аватарку
Да!!! С сиськами!!!
на шару тут тока радиолюбителям помогают, бо программисты из них никакие )))
поставить женскую аватарку
Да!!! С сиськами!!!
и попросить раскрыть тему? )))