C++关键字大总结

register:
    如果有一些变量使用频繁,则为存取变量的值少花一些时间,
可以将该局部变量的值放在CPU的寄存器中,需要时直接从寄存器
中取出参加运算,不必去内存中去存取。由于寄存器的存取速度
远远高于内存的存取速度,因此这样做可以提高执行效率。这种
变量叫做“寄存器变量”,用register做声明。
说明:
     (1)只有局部自动变量和形式参数可以作为寄存器变量,其他
     如全局变量则不可以。
     (2)一个计算机系统中的寄存器数目是有限制的,不能定义任意
            多个寄存器变量。
     (3)局部静态变量不能定义为寄存器变量。
const:
     (1)定义的const常量,具有不可变性。
     (2)便于进行类型的检测,消除了一些不安全的隐患。
     (3)保护被修饰的东西,防止的意外的改变影响到程序的安全。
     (4)提高了代码的健壮性,语法逻辑性更加严谨。
     (5)const类型的变量在程序运行时只有一份拷贝,节省空间。
     (6)编译器通常不为普通的const常量分配内存空间,而是将
      它们保存在符号表中,使它们成为了编译期的常量,没有了存储
      与读内存的操作,提高了效率。
static:
     (1)全局静态变量或者全局静态函数:
          保护该变量及该静态函数在其作用域内有效,不能在超出这个
          这个作用域的范围使用。
     (2)全局静态变量存储在全局数据区,为初始化的系统会给它默认
          初始值。局部静态变量也是存储在全局数据区,作用范围只在
          它所属的作用域内,但是生命周期却存在工程的结束。
     (3)静态成员变量只存在一份拷贝且属于该类而不属于任何成员变量,
          静态成员函数只能使用静态成员变量,因为其不属于任何一个对象,
          只属于这个类。
volatile:
          如果一个基本变量被volatile修饰,等于是告诉编译器不要优
          化该变量,意思就是每次取值都直接从内存中存取操作,这对
          每次取值都需要变量存储在内存的真实有严格要求的变量来说,
          就可以声明为volatile类型,这在多线程中使用的比较多。
typedef:
      (1)定义一种类型的别名,而不是简单的宏替换,可以用作同时声明指针
          型的多个对象。如:
          char *pa,pb//声明了一个指针变量和一个字符变量。
          typedef char* CHAR_PTR
          CHAR_PTR pa,pb//此处就声明了两个指针变量。
      (2)typedef struct Node
            {
            }Node;//在旧的C语言中用的比较多,为结构体重新起一个别名。
      (3)用typedef来定义与平台无关的类型。
           比如定义一个VAL的浮点类型,在目标平台上可以表示高精度的范围。
           typdef double VAL;
           但是在另一个平台上不支持double类型,我们可以在这个平台上这样
           typedef float VAL;
           这样就可以跨平台的定义自己合适的类型,而不需要修改大量的代码。
      (4)为一个复杂的声明起一个简单或者容易标记的名字。
define:
      (1)对变量只在预处理阶段做原模原样的替换,不做任何的类型检测,主要是
            定义变量或者定义函数。
      (2)使用ifndef,define,endif来防止重复引用。
静态库:
            1.浪费空间,每个程序都有一份。
            2.如果有一个地方修改了则需要重新的编译加载。
            3.执行速度快,不需要动态加载。
    动态库:
            1.动态库只是导出一个动态表,在程序运行的时候他动态加载。
            2.多个程序共享
            3.运行时加载,可以很容易的修改,就是打补丁。
            4.运行的动态加载会花费一定的时间。
}
#include <iostream>
#include <math.h>
using namespace std;
//希尔排序。
void Shell(int a[],int n)
{
    //增量取值。
    //x=log10(n)此函数存在。
    //(log(a)(b))=lg(b)/lg(a)或ln(b)/ln(a) 。
    int m = n;//保存一份长度。
    int len = log10(n) / (log10(2))+3;
    int *b = new int[len];
    int k = 0;
    int temp;
    while (n > 1)
    {
        b[k++] = (n / 2 + 1);
        if (n / 2 == 1)break;
        n = (n / 2) + 1;
    }
    b[k++] = 1;
    for (int i = 0; i < k; ++i)
    {
        temp = b[i];
        for (int j = 0; j < m-temp; ++j)
        {
            if (a[j]>a[j + temp])
            {
                a[j] ^= a[j + temp];
                a[j + temp] ^= a[j];
                a[j] ^= a[j + temp];
            }
        }
    }
}
int main()
{
    int a[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, 5, 6, 0, 1, 2, 3, 5534, 5, 542, 3, 4, 6, 7, 8, 6, 123 };
    //int a[] = { 5, 4, 3, 2, 1 };
    Shell(a, sizeof(a) / sizeof(int));
        for (int i = 0; i < sizeof(a) / sizeof(int); i++)
        {
            cout << a[i] << "  ";
        }
        cout << endl;

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-18 05:52:26

C++关键字大总结的相关文章

php开发_多关键字,高亮显示

项目结构: 开始搜索:   这里搜索关键字("大""这") 搜索结果:  高亮显示 项目所需数据库结构: ================================================================ 实现代码: ================================================================ conn.php 1 <?php 2 $conn = @ mysql_connect(

B树、B-树、B+树、B*树

B树.B-树.B+树.B*树 B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中: 否则,如果查询关键字比结点关键字小,就进入左儿子:如果比结点关键字大,就进入 右儿子:如果左儿子或右儿子的指针为空,则报告找不到相应的关键字: 如果B树的所有非叶子结点的左右子树的结点数目均保持差

排序 -- 思路简析(一)

简介 本篇文章总结一下最近学习的排序算法,提炼出其思想及不同之处.有归并排序,快速排序,堆排序以及冒泡排序 归并排序(Merging Sort) 归并是指将两个或两个以上的有序表组合成一个新的有序表. 归并排序是指把无序的的待排序序列分解成若干个有序子序列,并把有序子序列合并为整体有序序列的过程. 长度为1的序列是有序的. 采用两两分解和归并的策略简单易行,这样的归并排序称为2-路归并排序. 归并排序的实现 public static void sort(int[] arr) { if (arr

二叉树学习笔记之二叉查找树(BSTree)

二叉查找树即搜索二叉树,或者二叉排序树(BSTree),学习回顾一下有关的知识. >>关于二叉查找树 二叉查找树(Binary Search Tree)是指一棵空树或者具有下列性质的二叉树:1. 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值:2. 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值:3. 任意节点的左.右子树也分别为二叉查找树.4. 没有键值相等的节点,这个特征很重要,可以帮助理解二叉排序树的很多操作.二叉查找树具有很高的灵活性,对其优化可

【转】B树、B-树、B+树、B*树、红黑树、 二叉排序树、trie树Double Array 字典查找树简介

B  树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中:否则,如果查询关键字比结点关键字小,就进入左儿子:如果比结点关键字大,就进入右儿子:如果左儿子或右儿子的指针为空,则报告找不到相应的关键字: 如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性

B 树、B- 树、B+ 树和B* 树

B树 即二叉搜索树:1. 所有非叶子结点至多拥有两个儿子(Left和Right):2. 所有结点存储一个关键字:3. 非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树:如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中:否则,如果查询关键字比结点关键字小,就进入左儿子:如果比结点关键字大,就进入右儿子:如果左儿子或右儿子的指针为空,则报告找不到相应的关键字:如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二

数据库索引B+树

面试时无意间被问到了这个问题:数据库索引的存储结构一般是B+树,为什么不适用红黑树等普通的二叉树? 经过和同学的讨论,得到如下几个情况: 1. 数据库文件是放在硬盘上,每次读取数据库都需要在磁盘上搜索,因此需要考虑磁盘寻道时间,我们都知道磁盘寻道开销是非常大的.同时,索引一般也是非常大的,内存不能放下,因此也会放在磁盘上.(另外,还与局部性原理与磁盘预读有关系). 2. B+树所有的关键字都出现在叶子节点的链表(稠密索引)中,且链表中的关键字是有序的.非叶子节点只起索引作用(稀疏索引). 叶子节

B-树、B+树、红黑树

B-树 B-tree树即B树,B即Balanced,平衡的意思,B-树又称为多路平衡查找树.因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解.如人们可能会以为B-树是一种树,而B树又是另一种树.而事实上是,B-tree就是指的B树. 一.定义 B-树是一种多路搜索树(并不一定是二叉的) 1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树.B_树). 一棵

数据结构B树

B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中: 否则,如果查询关键字比结点关键字小,就进入左儿子:如果比结点关键字大,就进入 右儿子:如果左儿子或右儿子的指针为空,则报告找不到相应的关键字: 如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树 的搜索