#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 /