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

Почему я никогда не буду использовать STL. (2 стр)

Страницы: 1 2 3 4112 Следующая »
#15
14:06, 2 июня 2010

Pushkoff
> все конструкторы вызовутся сразу...
С какого перепугу, если место под элементы было зарезервировано?

#16
14:15, 2 июня 2010

Мне тут на тему STL добрую шутку в аську скинули:
умным может быть ктото один - либо указатель, либо программист (с)

#17
14:21, 2 июня 2010

Как сказал один из прежних товарищей:  То же использую  stl
для хранения только указателей:    std::vector<MyObject*> m_vector;

Это так .. на интуитивном уровне ))..  Путь лучше целые циферки (указатели)  там.. сортирует,  удаляет и т.д.

#18
14:36, 2 июня 2010

djonmalkovi4
> В общем я использую только placement new и самопальные деструкторы Data->~T(),
> а память выделяю и удаляю чем то типа malloc и free, просто потому, что они
> делают ровно то что и требуется, они создают и удаляют объект только по запросу
> программиста, и ровно столько копий и столько конструкторов, сколько сказал
> программист.
К вашему сожалению, этот метод был открыт мной еще в теме про "стек". Он является единственноверным, чистым и сияющим в болото С++.

На самом деле контейнеры не нужны, потому как почти никогда никто не использует все их возможности, любую задачу можно решить умнее и лучше без контейнеров, чем с ними.
Они избыточны и переполнены матана.

#19
14:59, 2 июня 2010

Pokimon
> На самом деле контейнеры не нужны, потому как почти никогда никто не использует
> все их возможности, любую задачу можно решить умнее и лучше без контейнеров,
> чем с ними.
> Они избыточны и переполнены матана.

Давай на конкретных примерах. Напиши интерпретатор для вычисления значения арифметических выражений. Язык определяется такой грамматикой:

e ::= n | (e1 + e2) | (e1 * e2)

где n -- натуральное число, + и * означают сложение и умножение натуральных чисел.
Программа-интерпретатор должна считать текстовый файл с диска, и затем вывести в stdout результат вычисления.

Раз уж *любую* задачу можно решить умнее и лучше без контейнеров (читай: типов данных, ага), то предложенную задачу уж точно можно решить. Умнее и лучше.

#20
15:02, 2 июня 2010

RPGman
> С какого перепугу, если место под элементы было зарезервировано?
тогда vec.reserve() а не  resize(), тут вообще обсуждают проблему копирования при добавлении элемента...

#21
15:02, 2 июня 2010

ksacvet777
> Как сказал один из прежних товарищей: То же использую stl
> для хранения только указателей: std::vector<MyObject*> m_vector

лучше, конечно,
std::vector<ref<MyObject>> m_vector

#22
15:03, 2 июня 2010

Pokimon
> Они избыточны и переполнены матана.
поцелуй меня в пачку :)

(c) Волочкова

#23
15:05, 2 июня 2010

Pokimon
ты как-то обещал написать список за секунду... когда ждать?
а еще ГУЙ и Арканоид с физикой... когда ты все это успеешь?

#24
15:08, 2 июня 2010

chiaroscuro
> Давай на конкретных примерах. Напиши интерпретатор для вычисления значения
> арифметических выражений. Язык определяется такой грамматикой:
> e ::= n | (e1 + e2) | (e1 * e2)

хех, а где опрделение самого exp ?

типа

exp ::= число | переменая

?

#25
15:18, 2 июня 2010

Pushkoff
> тогда vec.reserve() а не resize(),
reserve не добавит элемент в контейнер.
А вот resize как раз и создаст новые элементы. Причем дефолтный конструктор будет вызван только для новых элементов.

>тут вообще обсуждают проблему копирования при добавлении элемента...
resize сконструирует новый объект прямо в векторе. Никаких временных объектов не будет создано, и никакого копирования не будет произведено.

#26
15:22, 2 июня 2010

innuendo
>std::vector<ref<MyObject>>
наверное вылезут кэш промахи

#27
15:26, 2 июня 2010

Andrey
> > td::vector<ref<MyObject>>
> наверное вылезут кэш промахи

а когда вылезут мемлики - будет ещё хуже :)

#28
15:27, 2 июня 2010

RPGman
читай внимательно первый пост...

#29
15:30, 2 июня 2010

innuendo
> хех, а где опрделение самого exp ?
>
> типа
>
> exp ::= число | переменая
>
> ?

Переменных в самом языке нету, только числа и две операции. Чтобы узнать, какие предложения генерируются этой грамматикой:

> e ::= n | (e1 + e2) | (e1 * e2)

можно составлять сложные конструкции из простых, подставляя подвыражения вместо переменных:

5 // удовлетворяет n, первой альтернативе правила e
(5 + 5) // удовлетворяет (n + n), то есть (e1 + e2) если e1 удовлетворяет n, e2 удовлетворяет n
((1 + 2) * 3) // удовлетворяет (e1 * e2), если заместо e1 подставить (n+n), а заместо e2 -- n
(4 + ((1 + 2) * 3))

и так далее.

Страницы: 1 2 3 4112 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.