Re: Шпаргалка по С++ контейнерам и алгоритмам
От: jazzer Россия Skype: enerjazzer
Дата: 27.11.09 08:46
Оценка: 33 (3) +3
Здравствуйте, remark, Вы писали:

R>Шпаргалки по С++ контейнерам, интераторм, алгоритмам и строкам:

R>C++ Containers Cheat Sheet
R>C++ Iterators & Algorithms Cheat Sheet
R>Shifting from C to C++ strings

Синее на синем — это мощный дизайнерский ход

Тут нет одной очень важной информации — при каких операциях что инвалидируется.
А эту информацию знать полезно, когда выбираешь контейнер.

Например, у дека при вставке инвалидируются все итераторы, но (и это очень важно) ссылки на элементы (прямые ссылки, не в виде итераторов) инвалидируются только при вставке в середину, а если вставляешь в концы дека — ссылки сохраняются (но все итераторы все равно инвалидируются).
Аналогично для erase — если удаляешь из середины, то инвалидируется всё, а если с концов — то только ссылки и итераторы на удаленные элементы (ссылки и итераторы на остальные элемены остаются жить).

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

R>

jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.