MST

星途 面试题库

面试题:C++ sort在多态类型容器中的适配

定义一个基类Base和两个派生类Derived1、Derived2,都包含一个int类型的数据成员value。有一个std::vector<Base*>类型的容器,里面存放了指向Derived1和Derived2对象的指针,要求使用sort算法对这个容器中的指针按对象的value值升序排序,你将如何实现?(注意要处理好动态多态相关的问题)
27.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <vector>
#include <algorithm>

class Base {
public:
    virtual int getValue() const = 0;
    virtual ~Base() = default;
};

class Derived1 : public Base {
public:
    Derived1(int val) : value(val) {}
    int getValue() const override { return value; }
private:
    int value;
};

class Derived2 : public Base {
public:
    Derived2(int val) : value(val) {}
    int getValue() const override { return value; }
private:
    int value;
};

bool compare(Base* a, Base* b) {
    return a->getValue() < b->getValue();
}

int main() {
    std::vector<Base*> vec;
    vec.push_back(new Derived1(3));
    vec.push_back(new Derived2(1));
    vec.push_back(new Derived1(2));

    std::sort(vec.begin(), vec.end(), compare);

    for (Base* ptr : vec) {
        std::cout << ptr->getValue() << " ";
        delete ptr;
    }
    std::cout << std::endl;

    return 0;
}
  1. 首先定义Base类,包含一个纯虚函数getValue用于获取value值,同时定义虚析构函数,防止内存泄漏。
  2. Derived1Derived2类继承自Base类,并实现getValue函数。
  3. 定义一个比较函数compare,用于比较两个Base指针指向对象的value值。
  4. main函数中,创建Derived1Derived2对象的指针并放入std::vector<Base*>中。
  5. 使用std::sort算法对容器中的指针按value值升序排序。
  6. 最后输出排序后的value值,并释放动态分配的内存。