Почему контейнеры STL предпочтительнее контейнеров MFC? - PullRequest
29 голосов
/ 28 августа 2009

Раньше я использовал классы коллекции MFC, такие как CArray и CMap. Через некоторое время я переключился на контейнеры STL и некоторое время использовал их. Хотя я считаю STL намного лучше, я не могу точно определить точные причины этого. Некоторые из рассуждений, таких как:

  1. Требуется MFC: не поддерживается, потому что другие части моей программы используют MFC
  2. Это зависит от платформы: не выполняется, потому что я запускаю свое приложение только в Windows. (Нет необходимости в переносимости)
  3. Это определено в стандарте C ++: ОК, но контейнеры MFC все еще работают

Единственная причина, по которой я могу прийти, - это то, что я могу использовать алгоритмы для контейнеров. Есть ли какая-то другая причина, по которой мне не хватает здесь - что делает контейнеры STL лучше , чем контейнеры MFC?

Ответы [ 13 ]

2 голосов
/ 28 августа 2009

Рядом с упомянутыми аспектами: хорошо поддерживаемый, доступный стандарт, оптимизированный для производительности, разработанный для использования с алгоритмами, я мог бы добавить еще один аспект: безопасность типов и множество проверок во время компиляции. Вы даже не представляете, как рисуете double из std::set<int>.

2 голосов
/ 28 августа 2009

Поскольку библиотека, использующая итераторы для объединения последовательностей любого вида с алгоритмами, обеспечивающими, чтобы A) все разумные перестановки были возможны, и B) она универсально расширяема, то есть (когда вы думаете о своей концепции библиотеки контейнеров, как это было 15 лет назад) такая ошеломляющая идея о том, что она в значительной степени выкинула из воды все остальное менее чем за десятилетие?

Серьезно, у STL есть свои недостатки (почему бы не диапазоны вместо итераторов? И эта идиома удаления-удаления не совсем хороша), но она основана на блестящей идее, и есть очень веские причины, по которым нам не нужно изучать новая библиотека контейнеров / алгоритмов каждый раз, когда мы начинаем на новой работе.

2 голосов
/ 28 августа 2009

Это случай, когда какой-либо инструмент работает для той работы, которую вы хотите сделать, и «лучше» - это субъективный термин.

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

Если вы уверены, что ваш код останется в MFC-land, и контейнеры MFC будут работать на вас, почему бы не продолжать их использовать?

Контейнеры STL не лучше, чем контейнеры MFC, однако, поскольку они являются частью стандарта, они более полезны в более широком диапазоне контекстов.

...