Флейм
GameDev.ru / Флейм / Форум / C++03 - удалить из вектора целых элементы меньше 10 (10 стр)

C++03 - удалить из вектора целых элементы меньше 10 (10 стр)

Поделиться
Страницы: 19 10 11 1217 Следующая »
CasDevПостоялецwww6 дек. 201717:48#135
desss
> Ты хочешь сказать, что нельзя было перегрузить методы принимающие итераторы
> методами принимающими индексы?
> Причем тут вообще компиляторы и производительность машин?

Для чего создавалась стандартная библиотека шаблонов?
Для того, чтобы стандартизировать работу с коллекциями.

Был у тебя std::vector, стал std::list - и все работает БЕЗ изменения кода по всему проекту, где задействована переменная.
Ну что тут непонятного-то?

1 frag / 2 deathsУчастникwww6 дек. 201717:58#136
CasDev
> Был у тебя std::vector, стал std::list - и все работает БЕЗ изменения кода по
> всему проекту, где задействована переменная
Чушь какая. Если был вектор, значит был доступ по индексу.
MAMOHT-92Постоялецwww6 дек. 201718:00#137
CasDev
если ты проитерировался по листу, через begin() + indNum, то почему  нельзя просто по листу через индексы пройтись(ну не отметая того факта, что это дичь)? И да, если ты поменял вектор на лист и хочешь, то чтобы все  заработало, надо для итераторов auto использовать, а иначе еще и тип итератора надо менять повсюду. 

Правка: 6 дек. 2017 18:01

CasDevПостоялецwww6 дек. 201718:03#138
MAMOHT-92
> И да, если ты поменял вектор на лист и хочешь,

coll.begin() на что поменяется, друже?

std::vector<int> in;
std::list<int> out;
std::copy (in.begin(), in.end(), back_inserter(out));

Меняем типы местами. Что изменится в коде?

Правка: 6 дек. 2017 18:11

MAMOHT-92Постоялецwww6 дек. 201718:08#139
твою ж налево, у меня среда разработки умеет вменяемо определять, что за тип для auto переменной и подсвечивать методы.
1 frag / 2 deathsУчастникwww6 дек. 201718:17#140
Если ты выбрал именно вектор, и он дофига где используется, то с вероятностью 100% ты пользовался именно особенностями вектора, и значит так просто поменять вектор на лист не выйдет.
Вся эта унификация алгоритмов она чисто для красоты, чтоб код писать не вспоминая уникальное название данного алгоритма для каждого контейнера.
beejahПостоялецwww6 дек. 201718:20#141
1 frag / 2 deaths
> Вся эта унификация алгоритмов она чисто для красоты, чтоб код писать не
> вспоминая уникальное название данного алгоритма для каждого
Еще чтобы в них сырые указатели подсовывать для лулзов.
CasDevПостоялецwww6 дек. 201718:23#142
1 frag / 2 deaths
> Если ты выбрал именно вектор, и он дофига где используется, то с вероятностью
> 100% ты пользовался именно особенностями вектора, и значит так просто поменять
> вектор на лист не выйдет

Чушь какая. В STL пользуешься унифицированной коллекцией с ОДИНАКОВЫМИ методами. Заменить одну на другую вообще не проблема. В том её смысл и состоит.

> Вся эта унификация алгоритмов она чисто для красоты, чтоб код писать не
> вспоминая уникальное название данного алгоритма для каждого контейнера.

Так вообще код упрощается (для человека, для компилятора то ровно наоборот: поди разбери, чего там от него хотят, он сейчас и анонимный класс за тебя выстроит, и аргументы преобразует в какие больше подходят, и даже дерево выражений соптимизурет).

1 frag / 2 deathsУчастникwww6 дек. 201719:03#143
CasDev
> Заменить одну на другую вообще не проблема.
Давай, возьми реальный пример из продакшена и замени вектор на лист, чтоб скомпилилось и чтоб программа раком не встала.
desssПостоялецwww6 дек. 201720:48#144
CasDev
> В STL пользуешься унифицированной коллекцией с ОДИНАКОВЫМИ методами.
Вот именно. Только это нужно в минимуме случаев, но из-за повернутости на этой идее фикс и оверинжениринга, вместо удобного для чтения и написания апи имеем какую-то херню.
Мне чаще нужно с вектором нормально работать, а не заменять его на лист. Да и смысл в том чтобы заменять лист на сет, а сет  на вектор практически всегда отсутсвует.
Единственная действительно необходимая унификация между разными контейнерами, это итерация по элементам. Ну и доступ по ключу для контейнеров у которых он есть. Все равно большинство алгоритмов специализируются под конкретный контейнер.

Правка: 6 дек. 2017 20:57

desssПостоялецwww6 дек. 201720:51#145
CasDev
> Так вообще код упрощается (для человека, для компилятора то ровно наоборот:
> поди разбери, чего там от него хотят, он сейчас и анонимный класс за тебя
> выстроит, и аргументы преобразует в какие больше подходят, и даже дерево
> выражений соптимизурет).
А вот это вообще ни к селу ни к городу, потому что это сравнение шаблонного кода и нешаблонного кода на индирекциях и указателях.
А если сравнивать шаблонный код, то компилятору насрать - STL такой же код на плюсах как и любой другой. Главные оптимизации - мономорфизация и инлайнинг/прямой вызов, доступны любому шаблонокоду.

Правка: 6 дек. 2017 21:18

CasDevПостоялецwww6 дек. 201721:52#146
1 frag / 2 deaths
В продакшене у меня Obj-C и Swift, так что мимо кассы.

Но когда изучал С++ и писал генератор карт - не помню особых проблем. Пишешь стадию, а дальше методом тестов проверяешь, какая коллекция на обычном размере дает оптимальный результат. Никаких проблем.

desss
> Только это нужно в минимуме случаев
> Единственная действительно необходимая унификация между разными контейнерами, это итерация по элементам.

У Вас первое предложение противоречит второму.

> Главные оптимизации - мономорфизация и инлайнинг/прямой вызов, доступны любому шаблонокоду.

Я вот в ноябре читал книжку Джона Скита, он описывает, как все устроено "под капотом".
Тот же самый auto как выводится. Почитай, интересная книжка.

MAMOHT-92Постоялецwww6 дек. 201722:11#147
CasDev
Что простите? Код делается под контейнер, а контейнер выбирается наиболее подходящий для задачи. Можно по листу линейный поиск осуществлять, а можно из мапы по ключу выбрать. А можно вообще использовать set  и использовать операции по их пересечению.
MAMOHT-92Постоялецwww6 дек. 201722:15#148
И когда я писал, что код пишется под контейнер, я имел в виду не итераторы там расставить, а выбрать вменяемые структуры и формат хранения данных, реализовать требуемые операторы, если они требуются, например, больше / меньше или определить метод по получению хэш функции от объекта и грамотно все в совокупности применить.
CasDevПостоялецwww6 дек. 201723:19#149
MAMOHT-92
Тип коллекции выбирается. vector / deque (не помню название - в обе стороны растет), ordered / unordered set или что-то такое.
Страницы: 19 10 11 1217 Следующая »

/ Форум / Флейм / Программирование

2001—2017 © GameDev.ru — Разработка игр