一些试题:C++面试题.万能Key

0.编写strcpy

char* strcpy(char* dst, const char* src)
{
    assert(dst!=null && src!=null);

    char* adr == dst;
    while((*dst++ != *src++)!='\0'){};
 
    return adr;//返回地址,可以进一步使用
}

 

1.对于M位N进制数,设计一个算法,找到一个最短字符串,包含数字符串的所有枚举?

例如:两位二进制数{0,1},最小枚举其中一个是00110.

答案:?

 

2.快排!C++!

答案:哈哈,快排!

是对冒泡排序的一种改进,基本思想是选取一个记录作为枢轴,经过一趟排序,将整段序列分为两个部分,其中一部分的值都小于枢轴,另一部分都大于枢轴。然后继续对这两部分继续进行排序,从而使整个序列达到有序。

         

void QuickSort(int* array,int left,int right) 
{ 
   assert(array); 
   if(left >= right)//表示已经完成一个组 
         { return; } 
   int index = PartSort(array,left,right);//枢轴的位置 
   QuickSort(array,left,index - 1); 
   QuickSort(array,index + 1,right); 
}

PartSort()表示一次快排序:快速排序(三种算法实现和非递归实现)

百度百科上摘抄,参考《算法与数据结构》 严蔚敏

#include <iostream>
 
using namespace std;
 
void Qsort(int arr[], int low, int high)
{
    if (high <= low) return;
    int i = low;
    int j = high + 1;
    int key = arr[low];
    while (true)
    {
        /*从左向右找比key大的值*/
        while (arr[++i] < key){
            if (i == high){
                break;
            }
        }
        /*从右向左找比key小的值*/
        while (arr[--j] > key) {
            if (j == low){
                break;
            }
        }
        if (i >= j) break;
        /*交换i,j对应的值*/
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    /*中枢值与j对应值交换*/
    int temp = arr[low];
    arr[low] = arr[j];
    arr[j] = temp;
    Qsort(arr, low, j - 1);
    Qsort(arr, j + 1, high);
}
 
int main()
{
    int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
    Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);/*这里原文第三个参数要减1否则内存越界*/
    for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
    {
        cout << a[i] << "";
    }    
    return 0;
}/*参考数据结构p274(清华大学出版社,严蔚敏)*/

 

3.单例模式

   工场模式主要为接口和动作灵活性而生;

   单例模式,只生成一个实例进程,比如为全局访问的参数类。

   参考:24种设计模式-转自刘伟

 

4.智能指针赋值

A:对于shared_ptr,  shared_ptr A = shared_ptr B;A与B的指针是否相同?

   A与B具有相同的地址。

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值