C++ STL против платформы коллекций Java

Опубликовано: 19 Февраля, 2023

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. С точки зрения использования его в соревновательном программировании, можно использовать любой из них в зависимости от их удобства, поскольку это может сделать код менее сложным и сократить ваше время на ответ на вопрос.