Базовый класс отсортированных контейнеров в C

#c #containers #stdmap #stdset

#c #контейнеры #stdmap #stdset

Вопрос:

Есть ли в C общий базовый класс для отсортированных контейнеров, таких как std::set или std:map?

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

Комментарии:

1. en.cppreference.com/w/cpp/algorithm/set_difference

2. Чтобы ответить на ваш вопрос: нет, потому что в стандарте так не сказано. Если они есть, это деталь реализации, и, вероятно, наследование private .

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

Ответ №1:

Есть ли в C общий базовый класс для отсортированных контейнеров, таких как std::set или std:map?

Нет, у них нет общего базового класса.

Вы можете использовать их конкретные iterator типы, чтобы полагаться на общие черты в шаблонной реализации.

Ответ №2:

Не имеет универсального класса.

Но у них похожий механизм: итераторы. Позвольте мне привести пример:

 #include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <list>

using namespace std;

template<class InputIterator>
void printContainer(InputIterator begin_it,InputIterator end_it)
{
    while (begin_it != end_it)
    {
        cout << (*begin_it) << ' ';
        begin_it  ;
    }

    cout << endl;
}

int main()
{
    vector<int> vector_data;
    list<int> list_data;

    srand(time(0));

    for (int i = 0;i < 5;i  )
    {
        int n = rand() % 10;
        vector_data.push_back(n);
        list_data.push_back(n);
    }

    printContainer(vector_data.begin(),vector_data.end());
    printContainer(list_data.begin(),list_data.end());
}
  

Проверьте библиотеку алгоритмов, в ней есть функции для универсальных контейнеров:
http://www.cplusplus.com/reference/algorithm /