Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

эффективное использование STL

25K
27 февраля 2007 года
hVost
5 / / 26.02.2007
помогите разобраться плз
Джосьютис прочитан туда и обратно, а также Липпман и др.
когда начал использовать STL, то столкнулся с фондументальными проблемами:

1. отсутствие хорошо организованного справочника.. честно говоря из найденного один лучше другого.. описания через base_..<> просто сбивают с толку, шаблоны собранные из других шаблонов, которые в свою очередь собираются из кучи вспомогательных шаблонов.. что реально творится в std? чем пользуется уважаемый all?

2. генерация кода с использованием STL поражает. там где сказано, что использование шаблонов позволит генерировать минимально избыточный код полностью противоречит практике. в коде с полной оптимизацией откуда-то берутся тонны base_..??@ и т.д. кроме того не понял гарантированно присутствующей "Januar Februar Marth...." и т.п. инфы. нафига она мне? я даже не использую cin и cout, только механизм istream и ostream (да и без них ситуация не на много лучше). это нормально?

3. на сколько эффективна <string>? я понимаю, подсчёт ссылок, но как понять многократное выделение-уничтожение динамической памяти, не согласующееся с выполняемой полезной работой? используя string напрягать извилины приходится почему-то больше, чем с char*.. или не стоит на этом заморачиваться? книжки говорят об этом весьма пространно.

4. есть смысл использовать локальные контексты? если да, то следующий вопрос - как? ну я нашёл примеры, и горстку информации.. примеры компилируются, но дальше контекста "С" я не ушёл :( конечно можно забить и юзать С-шную глобальную локалку, либо обращаться например у winapi.. чего мне крайне не хотелось бы делать в реально независимом проекте

..доступ к нету у меня весьма ограниченный, но покопавшись я нашёл, что есть два лагеря - один люто ненавидит STL, другой просто его игнорирует.. отдельные чо-то собирают с использованием минимальных возможностей библиотеки. мне лично она нравится, поэтому я хочу использовать её "эффективно" :) на сколько я безнадежен?
2
27 февраля 2007 года
squirL
5.6K / / 13.08.2003
ну мне нравится STL, так что есть еще лагерь. STL мне сильно упрощает жизнь. а под рукой у меня всегда Леон Амерааль "STL для программистов на С++".
а вот проблемы - они батенька, ФУНДАМЕНТАЛЬНЫЕ. а не то, что вы написали :)
7.6K
28 февраля 2007 года
Darien
125 / / 15.01.2006
STL отличная библиотека, те кто его ненавидят - не понимают насколько это удобно. По поводу base'of и прочих шаблонов - парится не советую, это для себя разработчики делали. Есть книга C++ standard library - там прекрасно всё написано, ещё прекрасно всё написано в msdn 2005, но тут нужно хотя бы немного уметь уже программировать STL. По-поводу stringa - в некоторых реализациях говорят очень хитрая система выделения памяти, чуть ли не с построением деревьев суф/префксных, я не проверял, т.к. string юзаю в тех задачах, где его быстродействие не требуется.
1.8K
28 февраля 2007 года
k3Eahn
365 / / 19.12.2005
Цитата: hVost


2. генерация кода с использованием STL поражает. там где сказано, что использование шаблонов позволит генерировать минимально избыточный код полностью противоречит практике. в коде с полной оптимизацией откуда-то берутся тонны base_..??@ и т.д. кроме того не понял гарантированно присутствующей "Januar Februar Marth...." и т.п. инфы. нафига она мне? я даже не использую cin и cout, только механизм istream и ostream (да и без них ситуация не на много лучше). это нормально?


Сдаётся мне, что всё это происходит потому, что потоки (будь то строковые или файловые, или обычные) используют библиотеку локалей ( собственно что и приводит к увеличению размера генерируемого кода).
P.S.: А разве cin и cout не являются экземплярами istream и ostream соответственно?

25K
28 февраля 2007 года
hVost
5 / / 26.02.2007
ладно :) на основе ваших ответов генерим:

1. msdn 2005 (правда у меня есть только msdn 2003, но думаю расхождений не должно быть..)
2. k3Eahn согласен, что используют. но я так понел это в связи с гарантированной генерацией кода для cin и cout, даже если я их нигде не привлекаю? всё равно не понимаю такую принудительную техподдержку... это как-то отключается?
3. со стрингами относительно понятно.. может где уже было бурное их обсуждение? отошлите меня плз если ссылки завалялись..
4. что насчёт локалей? как мне гарантированно заявить русский локальный контекст к примеру? или лучше писать свои собственные фацеты? для всех языков мира же не опишешь.. а мне казалось интернационализация....

спасибо за ответы! хотя подозреваю, что вопросы были детские..
2
28 февраля 2007 года
squirL
5.6K / / 13.08.2003
та и ответы то... собснно... не особо взрослые
1.8K
01 марта 2007 года
k3Eahn
365 / / 19.12.2005
Цитата: hVost

msdn 2005 (правда у меня есть только msdn 2003, но думаю расхождений не должно быть..)



Именно по STL доки лежат здесь: http://www.sgi.com/tech/stl/

Цитата: hVost


2. k3Eahn согласен, что используют. но я так понел это в связи с гарантированной генерацией кода для cin и cout, даже если я их нигде не привлекаю? всё равно не понимаю такую принудительную техподдержку... это как-то отключается?


Во-первых, потоки входят в стандартную библиотеку C++, а не в STL.
Во-вторых, какой смысл инстанцировать basic_istream, basic_ostream, если ты в своём коде не использешь cin, cout? Ответ: никакого.

А вообще,если ты не используешь потоки(basic_istream, basic_ostream, basic_istringstream, basic_ostringstream, basic_ifstream и т.п.) - это ещё не значит что подобного рода инфа не включается. Вон взять ту же реализацию STL'я STLPort - несмотря на то, что потоки не используются, локали, получается, всё равно используются, поскольку кое-какая инфа всё равно добавляется.

P.S.: По поводу "раздувшейся" при использовании iostream'ов программы не стоит особо париться. Если уж очень это "мешает", и ты используешь только cin, cout, wcin, wcout, то линкуй RTL динамически.

63
01 марта 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: hVost

3. со стрингами относительно понятно.. может где уже было бурное их обсуждение? отошлите меня плз если ссылки завалялись..



вот
бурное обсуждение STL на этом форуме. Может, что-то полезное для себя найдешь там.

25K
02 марта 2007 года
hVost
5 / / 26.02.2007
k3Eahn
Цитата:
Именно по STL доки лежат здесь: http://www.sgi.com/tech/stl/



дык устаревшие же.. не то, чтобы они были не правильные, но они относятся к SGI STL, когда я имею в виду STL из стандартной библиотеки? или нельзя её так называть?

Цитата:
какой смысл инстанцировать basic_istream, basic_ostream, если ты в своём коде не использешь cin, cout? Ответ: никакого.



:() эээ... а я не могу использовать basic_istream/ostream не в консольном режиме, а в оконном, например, для работы с файлами, текстовыми конфигами и т.п. ? тогда какой смысл в cin/cout?
ещё вопрос, в бинарном режиме использовать потоки целесообразно?

STLPort это труднокомпилируемый ужос, который я таки прикрутил к DigitalMars.. ни к чему другому прикручивать не захотелось

Zorkus сенкс!

2
02 марта 2007 года
squirL
5.6K / / 13.08.2003
устаревшие, это те, что в HP разработал Александр Степанов :) а SGI - это новье считай ))
так что читай. можешь еще сюда сходить:
http://www.stlport.org/doc/index.html
1.8K
02 марта 2007 года
k3Eahn
365 / / 19.12.2005
Краткий исторический экскурс:
Википедия о STL - ru;
Википедия о STL - eng;

Цитата: hVost

) эээ... а я не могу использовать basic_istream/ostream не в консольном режиме, а в оконном, например, для работы с файлами, текстовыми конфигами и т.п. ?



Думаю, можешь. Во всяком случае я не видел, чтобы кто-нибудь запрещал использовать потоковый ввод/вывод в гуёвых приложениях.
Только вот basic_ostream/basic_istream в голом виде не используется. По большому счёту они играют роль базовых классов (тот же basic_ofstream, basic_ostringstream наследуются от basic_ostream).



[quote=Standard]The object cout controls output to a stream buffer associated with the object stdout, declared in
<cstdio> [/quote]

[quote=MSDN]The object controls insertions to the standard output as a byte stream.[/quote]
Т.е. cout - есть объект класса basic_ostream<char, char_traits<char> >, настроенный для вывода в стандартный вывод.

Цитата: hVost

ещё вопрос, в бинарном режиме использовать потоки целесообразно?


ИМХО, файловые потоки больше всего подходят для работы с текстовыми файлами.

1
02 марта 2007 года
kot_
7.3K / / 20.01.2000
Цитата: k3Eahn

ИМХО, файловые потоки больше всего подходят для работы с текстовыми файлами.


Почему? На чем основано такое предпочтение?

63
02 марта 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: hVost
k3Eahn

:() эээ... а я не могу использовать basic_istream/ostream не в консольном режиме, а в оконном, например, для работы с файлами, текстовыми конфигами и т.п. ? тогда какой смысл в cin/cout?
ещё вопрос, в бинарном режиме использовать потоки целесообразно?


Много раз говорилось на форуме - STL служат для реализации прикладной логики, это не gui - библиотека, в отличие от, скажем, mfc. И сочетается с любыми вышеуказанными библиотеками, если те (и компиляторы) в достаточной степени реализуют современный стандарт С++.

1.8K
02 марта 2007 года
k3Eahn
365 / / 19.12.2005
Цитата: kot_
Почему? На чем основано такое предпочтение?


Потому что они более удобны при работе с текстовыми файлами в сравнении с более низкоуровнероневыми file management API.
Да и так уж повелось, что fstream в большей степени ассоциируется с текстовыми файлами, чем с бинарными.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог