C++面试问题汇总

本文总结了C++面试中的常见问题,涵盖了堆(优先队列)、map的使用、sort与priority_queue的区别、C++设计模式、算法网站、内存管理、数据结构、构造函数与析构函数、虚函数、STL、智能指针等多个方面,旨在帮助读者全面了解C++编程的关键知识点。
摘要由CSDN通过智能技术生成
C++中堆(优先队列)的使用

1.priority_queue默认使用最大堆,例如:

std::priority_queue<int> q;

上面这条语句声明了一个最大堆。

2.最大堆与最小堆的声明:
priority_queue<>默认是大根堆的,这是因为优先队列队首指向最后,队尾指向最前面的缘故
也就是一个数组,如果用std::less排序(用<连接元素),优先队列的顶部一直都在数组末尾。

// 最小堆
std::priority_queue<int, std::vector<int>, std::greater<int> > q2; 

// 最大堆
std::priority_queue<int, std::vector<int>, std::less<int> > q2;

3.自定义比较函数,生成不同的最大堆和最小堆

// Using lambda to compare elements.
auto cmp = [](int left, int right) {
    return (left) < (right);}; // 大的数排前面
std::priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp);

4.cppreference上的例子(经过修改)

#include <functional>
#include <queue>
#include <vector>
#include <iostream>
 
template<typename T> void print_queue(T& q) {
   
    while(!q.empty()) {
   
        std::cout << q.top() << " ";
        q.pop();
    }
    std::cout << '\n';
}
 
int main() {
   
    std::priority_queue<int> q;
 
    for(int n : {
   1,8,5,6,3,4,0,9,7,2})
        q.push(n);
 
    print_queue(q);
 
    std::priority_queue<int, std::vector<int>, std::greater<int> > q2;
 
    for(int n : {
   1,8,5,6,3,4,0,9,7,2})
        q2.push(n);
 
    print_queue(q2);
 
    // Using lambda to compare elements.
    auto cmp = [](int left, int right) {
    return (left ) < (right );};
    std::priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp);
 
    for(int n : {
   1,8,5,6,3,4,0,9,7,2})
        q3.push(n);
 
    print_queue(q3);
}

最后的输出结果:

9 8 7 6 5 4 3 2 1 0 
0 1 2 3 4 5 6 7 8 9 
9 8 7 6 5 4 3 2 1 0
C++中map的知识

map默认是以从小到大的方式排序的,代码例子:

// constructing maps
#include
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值