//order_list.h
#pragma once
#include <list>
#include <initializer_list>
using namespace std;
template <typename T>
class order_list :public list<T> {
public:
explicit order_list(initializer_list<int> il) {
auto p = il.begin();
while (p != il.end())
insert(*p++);
}
order_list() {
}
//由于要构造有序表,所以需禁用基类的某些插入函数
void push_front(const T& val) = delete;
void push_back(const T& val) = delete;
//派生类会隐藏基类的同名函数(无论返回值和参数列表是否相同)
void insert(T val) {
auto it = this->begin();
while (it != this->end() && val > *it) {
it++;
}
list<T>::insert(it, val);
}
};
/main.cpp
#include "order_list.h"
#include <iostream>
using namespace std;
int main() {
order_list<int> ol{ 1,2,4,5 };
ol.insert(3);
ol.insert(100);
for (int x : ol) {
cout << x << endl;
}
return 0;
}
output:
1
2
3
4
5
100