C++面试题集4

C++面试题集4

C++面试题集4

一. 华为一道面试题-1-n排序

有N个大小不等的自然数(1--N),请将它们由小到大排序。
要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。

网上转的,一开始也没有注意到最开始的半句。

算法:N个不等的自然数1~N,排序完成后必然为1~N。所以可以一次遍历,遇到a[i]!=i的就把a[i]和a[a[i]]交换。

void sort(int a[], int n)
{
 int i;
 int t; /*临时变量:空间复杂度O(1)*/

 for (i=1; i<n+1; i++) /*时间复杂度O(n)*/
 {
 while(a[i]!=i)
  {
 t = a[a[i]];
 a[a[i]] = a[i];//排好一个元素
 a[i] = t;
  }
 }
}

二. 一次遍历 找 链表倒数第n个节点

 一道面试题目,阿明和晨晨看到并且告诉我答案的。要求通过一次遍历找到链表中倒数第n个节点,链表可能相当大,可使用辅助空间,但是辅助空间的数目必须固定,不能和n有关。
算法思想:两根指针,第一根先出发,相距n步后第二根出发。然后同时步进,直到第一根指针达到末尾。

struct iNode {
int value;
iNode * next;
};
iNode * getresult(iNode * head,int n)
{

iNode *pfirst;
iNode *psecond;

pfirst=head;
int counter;

for(counter=0;counter<n;counter++) {
 pfirst=pfirst->next;
}

psecond=head;

while(pfirst!=NULL) {
 pfirst=pfirst->next;
 psecond=psecond->next;
}

return psecond;

}

三. VC++学习笔记

1.       日期转成字符串:

   COleDateTime    ww;
ww=COleDateTime::GetCurrentTime();
AfxMessageBox(ww.Format("%Y-%m-%d %H:%M:%S"));

2.       字符串转成日期:

COleDateTime dt;

       dt.ParseDateTime(“2006-08-08 08:08:08”);

3.       资源文件

资源文件名:xxx.rc,其中要包含的主要文件:resource.h和afxres.h

4.       vc开发环境没有自动提示时:

   删除 目录下的ncb文件 ,再打开一般就ok了

5.       利用_variant_t 取数据库数据的方法:

   _variant_t ibb;

       ibb=(_variant_t)rs->GetCollect("inta");

       if(ibb.vt!=VT_NULL)

       {

              m_b=ibb.lVal;

       }

6.       平时取记录集字段值的方法:

   (LPCTSTR)(_bstr_t)rs->GetCollect("datea")

7.       DoModal()可以返回两个结果 IDOK,IDCANCEL,他们都是int型,分别是:1,2。通过EndDialog(IDOK)的方式返回。

8.       一般将数据库连接方面的信息放到app中。则AfxGetApp()非常重要,如;

   CAdo2App* mapp=(CAdo2App*)AfxGetApp();

   Map->conn->Execute(sql,NULL,adCmdText);

9.       DECLARE_DYNCREATE(类名),IMPLEMENT_DYNCREATE(类名,基类名)  使得由CObject继承来的类在程序运行的时候能够动态的创建。

10.   DECLARE_DYNAMIC(类名),IMPLEMENT_DYNAMIC(类名,基类名)  可以在运行时获得该类的信息

11.   DECLARE_SERIAL(类名),IMPLEMENT_SERIAL(类名,基类名,0)为一个可以串行化的CObject派生类产生必要的C++标题代码

12.   获得文档的方法: CMainFrame * pFrame=(CMainFrame *) AfxGetMainWnd();

CPClientDoc * pDoc =(CPClientDoc *) pFrame->GetActiveDocument();
 

13.   获得视图的方法:CMainFrame * pFrame=(CMainFrame *) AfxGetMainWnd();

myView =(CPClientView*) pFrame->GetActiveView();

14.   如果要引用全局变量或者全局方法,须在当前类中引入:extern 名字;

你可能感兴趣的:(C++面试题集4)