C++ STL против платформы коллекций Java
Java и C++ предоставляют разные функциональные возможности и варианты использования. Когда дело доходит до структур данных и алгоритмов, в Java есть специальная структура под названием Java collection framework , а C++ предоставляет библиотеку под названием STL . Итак, давайте посмотрим, в чем заключаются различные функции, сложности и сходство между ними обоими.
Платформа сбора Java
Коллекция Java обеспечивает основу для хранения и обработки группы объектов и содержит интерфейс, называемый итерируемым интерфейсом, который предоставляет итератору возможность перебирать все коллекции. Коллекция — это объект, представляющий группу объектов (например, классический класс Vector). Фреймворк коллекций — это унифицированная архитектура для представления коллекций и управления ими.
STL в С++
Стандартная библиотека шаблонов (STL) — это набор классов шаблонов C++ для предоставления общих структур данных и функций программирования, таких как списки, стеки, массивы и т. д. Это библиотека классов-контейнеров, алгоритмов и итераторов. Это обобщенная библиотека, поэтому ее компоненты параметризованы.
STL состоит из 4 компонентов:
- Алгоритмы
- Контейнеры
- Функции
- Итераторы
C++ предоставляет хорошо спроектированные STL, тогда как в Java есть контейнеры. Так что взгляните на то, что они оба содержат.
Сходства и различия между контейнерами в STL и интерфейсом коллекции в инфраструктуре коллекций Java
Параметры | Контейнеры в STL | Интерфейс коллекции в структуре коллекции Java |
---|---|---|
Список | список<тип-данных> li; | ArrayList<тип-данных> arr=new ArrayList<тип-данных>() LinkedList<тип-данных>LL=новый LinkedList<тип-данных>() |
Вектор | вектор<тип-данных> v; | Vector<тип-данных> v =new Vector<тип-данных>() |
Куча | стек<тип-данных> s; | Stack<тип-данных> s = new Stack<тип-данных>(); |
Очередь | очередь<тип-данных>q; | Queue<тип-данных> q = новый LinkedList<>(); |
Удалить из очереди | deque<тип-данных> deque; | Deque<тип-данных>d = new ArrayDeque<тип-данных>(); |
PriorityQueue | priority_queue<тип-данных> pq; | PriorityQueue<тип-данных> pq=new PriorityQueue<тип-данных>(); |
Установлен | set<тип-данных> s; | Set<тип-данных> set1 = new HashSet<тип-данных>(); Set<тип-данных> set2 = new LinkedHashSet<тип-данных>(); Set<тип-данных> set3 = new TreeSet<тип-данных>(); |
карта | карта<тип данных1,тип данных2> mp; | Map<тип данных1, тип данных2> map= new HashMap<тип данных1, тип данных2>(); |
Стандартная библиотека шаблонов C++ (STL) и Java Collections Framework (JCF)
СТЛ | Платформа коллекций Java (JCF) |
---|---|
Мы можем передавать функции в качестве параметров в C++. | Не разрешено в Java. |
Интерфейсов в C++ не существует. | Java зависит от интерфейсов. |
В STL контейнеры могут содержать либо объекты, либо объекты примитивных типов, и многие алгоритмы работают либо с контейнерами, либо с массивами. | В Java контейнеры содержат только объекты, а алгоритмы должны определяться отдельно для контейнеров и для массивов. |
Алгоритмы не зависят от контейнера, с которым они работают в STL. | Алгоритмы организованы контейнером в java. |
STL включает производительность как часть требований к интерфейсу. | Обычно это не относится к коллекциям Java. |
В коллекциях STL он может иметь указатели на объекты или сами объекты. | В коллекциях Java он может содержать только указатели на объекты. |
STL использует семантику значений, поэтому присваивание копирует коллекцию. | Java использует семантику ссылок, а присваивание просто назначает ссылку |
Итераторы в STL имеют значения, которые можно сравнивать. | В java итераторы не содержат значений, которые можно сравнивать. |
STL имеет иерархию итераторов с различными возможностями и обеспечивает произвольный доступ к элементам контейнера. | Java не предоставляет итераторов с произвольным доступом. Он предоставляет только Iterator и ListIterator. |
Платформа STL включает в себя модель распределения памяти, и STL-программисты должны знать, как работать с выделением памяти. | JCF не решает ни одну из этих проблем. |
Это основные различия между STL и фреймворком для коллекций Java. С точки зрения использования его в соревновательном программировании, можно использовать любой из них в зависимости от их удобства, поскольку это может сделать код менее сложным и сократить ваше время на ответ на вопрос.