继承STL模板类实现有序表

//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
posted @ 2022-04-22 16:30  天下太平  阅读(40)  评论(0编辑  收藏  举报