Гость
Форумы / C++ [игнор отключен] [закрыт для гостей] / как обнулить ячеку вектора (не удаляя)? / 25 сообщений из 146, страница 1 из 6
05.04.2021, 06:20
    #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
05.04.2021, 06:51
    #40059617
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обнулить ячеку вектора (не удаляя)?
Поскольку age обычно не бывает отрицательным - то можно договориться что если он равен -1 то это считается как null.
...
Рейтинг: 0 / 0
05.04.2021, 07:49
    #40059627
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как обнулить ячеку вектора (не удаляя)?
бабушкин зайчик,
Бывает что доп поле как раз технически красивее.
Преждевременная оптимизация зло.
...
Рейтинг: 0 / 0
05.04.2021, 09:36
    #40059634
как обнулить ячеку вектора (не удаляя)?
PetroNotC Sharp
Преждевременная оптимизация

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

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

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

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

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

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

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



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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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