powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / как обнулить ячеку вектора (не удаляя)?
25 сообщений из 146, страница 1 из 6
как обнулить ячеку вектора (не удаляя)?
    #40059614
Код: plaintext
1.
2.
3.
4.
5.
6.
struct A{
  int age;
  bool empty;
};

vector<A> v = {{5},{6},{9}};


я смог придумать только флаг empty, чтобы по нему смотреть - пустая это ячейка или нет
а может можно как-то null воткнуть в позицию v[1]?
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059617
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку age обычно не бывает отрицательным - то можно договориться что если он равен -1 то это считается как null.
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059627
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик,
Бывает что доп поле как раз технически красивее.
Преждевременная оптимизация зло.
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059634
PetroNotC Sharp
Преждевременная оптимизация

ну это не она... Это проектирование архитектуры. Если её неправильно спроектировать, потом всё переделывать.
меня больше интересует, а есть ли вообще иной способ и на сколько этот прекрасен?
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059636
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик

я смог придумать только флаг empty, чтобы по нему смотреть - пустая это ячейка или нет
а может можно как-то null воткнуть в позицию v[1]?

Попробуйте std::optional.
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059637
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик,

Если структуры большие, можно в векторе хранить std::unique_ptr<A> и вкорячивать nullptr.
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059655
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик,
Да. Я именно про архитектуру.
Она начинается с вопроса: "зачем хранить дырки в списке".
Но вы вправе не обсуждать. Ваше право.
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059656
PetroNotC Sharp,
потому что удаление ячейки влечёт за собой смещение всех последующих ячеек к началу
а это неприемлемо, т.к. вектор большой.
Кроме того, на место удалённых очень быстро будут записаны новые, так что это не проблема.
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059663
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
PetroNotC Sharp,
потому что удаление ячейки влечёт за собой смещение всех последующих ячеек к началу
а это неприемлемо, т.к. вектор большой.
Кроме того, на место удалённых очень быстро будут записаны новые, так что это не проблема.

Есть еще альтернативный подход. Называется вертикальные массивы.

Просто создаёшь два вектора.

Код: plaintext
1.
2.
vector<int> ages;
vector<boolean> isEmpty;



данные хранятся физически не консолидировано. Но логически - они связны по индексу элемента.

Эта структура будет экономнее чем вериант с struct A {..}
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059665
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
PetroNotC Sharp,
потому что удаление ячейки влечёт за собой смещение всех последующих ячеек к началу
а это неприемлемо, т.к. вектор большой.
Кроме того, на место удалённых очень быстро будут записаны новые, так что это не проблема.
неужели вектор не оптимизирован для этого? Дай цифры!
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059666
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Да. Сам два вектора делал часто).
И еще есть 1500 вариантов оптимизации скорости в угоду.... жертвы
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059668
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик,

>на место удалённых
Странная фраз. Что ты назвал местом? Бери другой список без мест или с местами заранее. Сортированный или нет......
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059670
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
бабушкин зайчик
PetroNotC Sharp,
потому что удаление ячейки влечёт за собой смещение всех последующих ячеек к началу
а это неприемлемо, т.к. вектор большой.
Кроме того, на место удалённых очень быстро будут записаны новые, так что это не проблема.

Есть еще альтернативный подход. Называется вертикальные массивы.

Просто создаёшь два вектора.

Код: plaintext
1.
2.
vector<int> ages;
vector<boolean> isEmpty;



данные хранятся физически не консолидировано. Но логически - они связны по индексу элемента.

Эта структура будет экономнее чем вериант с struct A {..}

Это, наверное, хорошо только в случае необходимости очень серьёзной и очень специфической
оптимизации. Но до этого придётся отказаться от std::vector и переходить на Си.

В остальных случаях ваш вариант ужасен.
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059672
да, кэш такое не одобрит
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059673
PetroNotC Sharp
неужели вектор не оптимизирован для этого? Дай цифры!

нету цифр.
А как его оптимизируешь то? Адреса памяти в массиве идут подряд непрерывно.
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059674
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик,
Тест на цифры делать пол часа.
Иначе как ты докажешь что задание выполнено?))
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059676
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
да, кэш такое не одобрит

Уж коли мы заговорили о кешах. Я-бы в первую очередь не одобрил структуру данных "с дырками внутри".
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059678
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
PetroNotC Sharp
неужели вектор не оптимизирован для этого? Дай цифры!

нету цифр.
А как его оптимизируешь то? Адреса памяти в массиве идут подряд непрерывно.
счас же умные указатели. Где там они физически тебе недоступно. Не?
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059680
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
У вас два слово "очень" и одно слово "ужасно". Это не инженерно)
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059681
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Преждевременная оптимизация без целей и цифр. (((
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059683
mayton
бабушкин зайчик
да, кэш такое не одобрит

Уж коли мы заговорили о кешах. Я-бы в первую очередь не одобрил структуру данных "с дырками внутри".

это вектор с дырками внутри, а не структура
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059684
PetroNotC Sharp
бабушкин зайчик
пропущено...

нету цифр.
А как его оптимизируешь то? Адреса памяти в массиве идут подряд непрерывно.
счас же умные указатели. Где там они физически тебе недоступно. Не?

не знаю. Вообще это что-то уже сродни листу... Там от балды ячейки в массив складываются, а не подряд.
В любом случае, МНЕ не подходит смещение индексов влево. Они должны оставаться теми же.
т.е. в ячейке 152 всегда должна быть та же самая структура с теми же самыми данными.
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059694
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
mayton
пропущено...

Уж коли мы заговорили о кешах. Я-бы в первую очередь не одобрил структуру данных "с дырками внутри".

это вектор с дырками внутри, а не структура

А какой длины будет твой вектор (в среднем) ?
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059696
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик,

>МНЕ не подходит смещение индексов влево
Сначала скорость мешала. Теперь направление)))
Короче, прогер сам себе задачи ставит. Бывает.
...
Рейтинг: 0 / 0
как обнулить ячеку вектора (не удаляя)?
    #40059698
PetroNotC Sharp,
проблема всегда была одна - смещение ячеек влево. Ну и скорость тут тоже участвует.

mayton
А какой длины будет твой вектор (в среднем) ?

миллионы
так ещё и мультипоточность
нельзя ждать, пока он там раздуплится
...
Рейтинг: 0 / 0
25 сообщений из 146, страница 1 из 6
Форумы / C++ [игнор отключен] [закрыт для гостей] / как обнулить ячеку вектора (не удаляя)?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]