C++ 面试问题集合

文章目录

设计模式

单例

cpp 复制代码
#include <iostream>
#include <string>
#include <memory>
#include <mutex>
#include <thread>

using namespace std;

class SingleTon{
protected:
    //外部不可直接操作
    SingleTon(const string& value):_value(value) {
        cout<< "SingleTon Construct" <<endl;
    }
    
    ~SingleTon() {
        cout<< "SingleTon Destruct" <<endl;
    }
    
    //静态成员   全局访问  智能指针   自动释放
    static  shared_ptr<SingleTon> singleton;
    
    string _value;
    
public:
    //禁止外部移动和拷贝
    SingleTon(const SingleTon && obj) = delete;
    void operator=(const SingleTon  obj) = delete;
    
    //提供静态接口  类名调用
    static shared_ptr<SingleTon> getInstance(const string& value){
        //call once 调用
        static once_flag s_flag;
        call_once(s_flag , [&](){ 
            singleton = shared_ptr<SingleTon>(new SingleTon(value), [](SingleTon * singleton){ delete singleton;});
        });
        
        return singleton;
    }
    
    string pinrtValue(){
        return _value;
    }
};

//变量重置
shared_ptr<SingleTon> SingleTon::singleton = nullptr;

void printValue(const string & value){
    cout<< SingleTon::getInstance(value)->pinrtValue()<<endl;
}

int main(){
    thread th1(printValue,"aaa");
    thread th2(printValue,"bbb");
    
    th1.join();
    th2.join();
    
    return 0;
}

排序算法

查找算法

二分查找

cpp 复制代码
#include <iostream>
#include <vector>

using namespace std;

using Rank = int;

class Fib{
private:
    Rank g ,f;
    
public:
    Fib(Rank n){
        f =0; g= 1;  //f 代表 fib(k -1)  g 代表 fib(k)
        while(0 < n--){
            g = g + f;
            f = g - f;
        }
    }
    
    Rank get(){return g;}
    
    Rank next(){
        g = g + f;
        f = g -f;
        
        return g;
    };
    
    Rank pre(){
        f = g-f;
        g = g-f;
        
        return g;
    }
};

template < typename T>
static Rank fibSearch(T *A,const T &e,Rank lo,Rank hi){
    for(Fib fib(hi - lo) ; lo < hi;){
        while( hi -lo < fib.get()) fib.pre();
        
        Rank mi = lo + fib.get() -1;
        
        (e < A[mi]) ? hi = mi : lo = mi + 1;
    }
    
    return lo - 1;
}

int main(){
    std::vector<Rank> test{1,3,6,8,9,11,13,17,20} ;
    
    Rank index = fibSearch<Rank>(test.data(),14,0,test.size());
    
    cout << "index: " << index <<endl;
    
    return 0;
}
相关推荐
Microsoft Word32 分钟前
c++基础语法
开发语言·c++·算法
天才在此1 小时前
汽车加油行驶问题-动态规划算法(已在洛谷AC)
算法·动态规划
莫叫石榴姐2 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
茶猫_3 小时前
力扣面试题 - 25 二进制数转字符串
c语言·算法·leetcode·职场和发展
肥猪猪爸5 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
readmancynn5 小时前
二分基本实现
数据结构·算法
萝卜兽编程5 小时前
优先级队列
c++·算法
盼海5 小时前
排序算法(四)--快速排序
数据结构·算法·排序算法
一直学习永不止步5 小时前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表
Rstln6 小时前
【DP】个人练习-Leetcode-2019. The Score of Students Solving Math Expression
算法·leetcode·职场和发展