1. 程式人生 > 其它 >繼承STL模板類實現有序表

繼承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