C++笔记:1

1.vector<vector<int> > array(3,vector<int>()) ; //vector()是对vector进行初始化,否则不能通过array[i].push_back()存入元素.这是因为空vector array根本不包含任何元素,所以不能通过下标去访问元素。正确的方法是使用push_back()。

2.vector 的下标运算符可以用于访问已存在的元素,不能用于添加元素。只能对已存在的元素执行下标操作。

3.C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中标识临时变量的语义,由于使用极少且多余,在C++11中已删除这一用法。

4.用auto声明的变量必须初始化;auto不能与其他类型组合连用(auto int p; // 这是旧auto的做法);定义在堆上的变量,使用了auto的表达式必须被初始化(int* p = new auto(0); //fine,不能少0);auto作占位符,并不是一个他自己的类型,因此不能用于类型转换或其他一些操作,如sizeof和typeid。

5.哈弗曼编码是一种无损二进制熵编码算法,其加权路径长度最小,字符串“alibaba”的二进制哈弗曼编码有13位(bit)。

6.多型数据类型就是数据元素的类型不确定,如堆,栈,有向图等。

7.概念解释:广义表L=(A,B,C),表头是A,表尾是(B,C),这是定义。如果只有一个那么尾部是空。concat()表示字符串拼接。

8.next数组的求解方法是:第一位的next值为0,第二位的next值为1,后面求解每一位的next值时,根据前一位进行比较。首先将前一位与其next值对应的内容进行比较,如果相等,则该位的next值就是前一位的next值加上1;如果不等,向前继续寻找next值对应的内容来与前一位进行比较,直到找到某个位上内容的next值对应的内容与前一位相等为止,则这个位对应的值加上1即为需求的next值;如果找到第一位都没有找到与前一位相等的内容,那么需求的位上的next值即为1。

9.串S=′aaab′,其Next数组值为 0123.前两位:next数组值前两位一定为01,即aaab中的前两位aa对应01。第三位:3a前面是2a(2a表示序号为2的a),2a的next数组值为1,将2a和1a相比,两者相同,都是a,则3a的next值为2a的next值加1,即2;第四位:4b前3a的next为2,3a与2a相比,二者相同,则其next值为3a的next加1,为3.

10.next数组下标从1开始计算。next[1] 肯定是 0 ,next[2] 肯定是 1。next[n] 的情况,将前面n-1个字符,计算从首尾开始组成最大的相同子串的长度,如果找到,那么next值是该长度加1,否则next值是1。如串′ababaaababaa′的next数组为011234223456。next[6]的计算,将前面的5个字符,从头尾开始取4个组成子串比较,如果不相等,则从首尾取3个字符组成子串继续比较,并以此类推, 如果一直比较到最后一个字符都不相等,那么该next值为1。4个字符的情况:abab : baba。3个字符的情况:aba : aba 此时相等,那么next[6] = 3+1 = 4。

11.next[i]的值主要是看s[i]之前的字符串中重复的子串长度。next[0] = -1,定值。

12.nextval[i]的求解需要比较s中next[i]所在位置的字符是否与s[i]的字符一致,如果一致则用s[next[i]]的nextval的值作为nextval[i],如果不一致,则用next[i]做为nextval[i]。

13.非空子串的个数共有n(n+1)/2个

14.当new String(“abc”)时,其实会先在字符串常量区生成一个abc的对象,然后new String()时会在堆中分配空间,然后此时会把字符串常量区中abc复制一个给堆中的String,故abc应该在堆中和字符串常量区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值