Ready

1.QT Connect 函数的第五个参数:

1)自动连接(AutoConnection),默认的连接方式,如果信号与槽,也就是发送者与接受者在同一线程,等同于直接连接;如果发送者与接受者处在不同线程,等同于队列连接。
2)直接连接(DirectConnection),当信号发射时,槽函数立即直接调用。无论槽函数所属对象在哪个线程,槽函数总在发送者所在线程执行,即槽函数和信号发送者在同一线程
3)队列连接(QueuedConnection),当控制权回到接受者所在线程的事件循环时,槽函数被调用。槽函数在接受者所在线程执行,即槽函数与信号接受者在同一线程
4)锁定队列连接(QueuedConnection)
Qt::BlockingQueuedConnection:槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。
5)单一连接(UniqueConnection)

2.快速排序

int partition(int a[],int low,int high)

{

       int iFlag = a[low];

   while(low<high)

{

      while((low<high)&&(a[high]>=iFlag))

                   high—;

      if(low<high)

  {

       int tmp = a[low];

      a[low] = a[high];

     a[high] = tmp;

  }

  while((low<high)&&(a[low]<=iFlag))

     low++;

if(low<high)

{

       int tmp = a[low];

      a[low] = a[high];

     a[high] = tmp;

}

}

return low;

}

 

void quickSort(int a[],int low,int high)

{

if(low<high)

{

         int iMid = partition(a,low,high);

         quickSort(a,low,iMid-1);

         quickSort(a,iMid+1,high);

}

}

3.链表逆序

struct Node

{

     int iData;

     Node* pNext;

}

Node* reverseList(Node* pHead)

{

   if((NULL==pHead)||(NULL==pHead->pNext))

           return pHead;

   Node* pNewHead = reverse(pHead->pNext);

   pHead->pNext->pNext = pHead;

   pHead->pNext = NULL;

   return pNewHead;

}

4.链表是否有环

bool IsLoop(Node* pHead)

{

       Node* pSlow = pHead;

       Node* pFast = pHead;

       while(pFast&& pFast->pNext)

      {

           pSlow = pSlow->pNext;

           pFast = pFast->pNext->pNext;

           if(pSlow==pFast)

               return true;

     }

     return false;

}

5.内存拷贝

void* mymemcpy(void* dest, void* source, size_t count)

   {

       void* ret = dest;

      if (dest <= source || dest >= (source + count))

       {

         while (count --)

               *dest++ = *source++;

     }

     else

     {

       dest += count - 1;

       source += count - 1;

       while (count--)

                *dest-- = *source--;

     }

      return ret;

   }

6.字符串拷贝

 char * strcpy( char *strDest, const char *strSrc )
  {
  assert( (strDest != NULL) &&(strSrc != NULL) );
  char *address = strDest;
  while( (*strDest++ = * strSrc++) != ‘\0’ );
  return address;
  } 

7、static的作用

(1)在函数体内,静态变量具有“记忆”功能,一个被声明为静态的变量在这一函数被调用的过程中,其值维持不变;

(2)函数体外,模块内,它的作用范围是有限制的:

静态变量:该变量可以被模块内所有函数访问,但不能被模块外其他函数访问,是一个本地的全局变量;
静态函数:作用域与普通函数不同,它的作用域仅限于本文件中,只能被这一模块的其他函数调用,不能被模块外的其他函数调用。
static全局变量与普通的全局变量的区别:static全局变量只初始化一次,目的是防止在其他文件中被引用。

static局部变量与普通的局部变量的区别:static只被初始化一次,下一次运算是上一次的结果。

static()函数与普通函数的区别:作用域不同,static()函数只在一个源文件重要有效,不能被其他源文件使用

类中的静态数据成员的特点:

(1)无论类的对象定义多少个,静态数据成员在类中只有一份复制品;

(2)静态数据成员存储在全局数据区,定义时,需分配空间;

(3)静态成员变量初始化是在类外;

静态成员函数不具有this指针,无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,只能调用其余的静态数据成员函数。

8、const的作用

定义const常量,具有不可变性;
进行类型检查
方便进行参数调整和修改
保护被修饰的东西,防止被意外更改
为函数重载提供参考
节省空间,避免不必要的内存分配

9.指针与引用的区别?

(1)非空区别。在任何情况下都不能使用指向空值的引用。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针要高。

(2)合法性区别。在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。

(3)可修改区别。指针与引用的另一个重要的区别是指针可以被重新赋值以指向另一个不同对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。

https://www.cnblogs.com/zyb428/p/5673738.html

 

posted @ 2019-04-20 10:23  shenyantaoit  阅读(527)  评论(0编辑  收藏  举报