2017.01.03:数组和字符串

来源:互联网 发布:淘宝多少好评一个心 编辑:程序博客网 时间:2024/05/22 02:03

1.数组。“开辟一个数组”相当于系统为你提供了一段连续的内存区间用于存取数据。在C/C++中,标准的数组可以通过在栈上分配空间,或者通过先声明指针,然后用new/malloc(C函数)在堆上动态地分配空间。在旧的C编译器中,不能在栈上定义一个长度不确定的数组,新的C编译器没有这一限制,但是数组长度不定,则不能初始化数组。C/C++编译环境下,二维数组的创建两种方式:在栈上创建intarray[M][N];在堆上创建int**array=new int *[M]。

2.哈希表的本质是当使用者提供一个键,根据哈希表自身定义的哈希函数,映射出一个下标,根据这个下标决定需要把当前的元素存储在什么位置。查找一个元素的平均时间复杂度是O(1),插入一个元素的平摊时间复杂度是O(1)。对于不同的键,哈希函数提供相同的存储地址时,哈希表就遇到了“冲突”。解决冲突的方式有链接法和开放地址法。链接法是利用辅助数据结构(e.g.链表)将哈希函数映射出相同地址的元素链接起来。而开放地址法是指以某种持续的哈希方式继续哈希,直到产生的下标对应上未被使用的存储地址。C++提供了map容器,map不算是严格意义上的哈希表,查找事件由O(1)变为O(logn)。

3.操作系统意义上的堆和栈。栈主要是指由操作系统自动管理的内存空间。当进入一个函数,操作系统会为该函数中的局部变量分配存储空间。事实上,系统会分配一个内存块,叠加在当前的栈上,并且利用指针指向当前一个内存块地址。堆是用来存储动态分配变量的空间。程序员可以随时分配或回收内存,否则会产生内存泄露。

4.vector可以用运算符[]直接访问元素。

0 0