技术难点?或许小弟我水平不够吧
技术难点?或许我水平不够吧第一题:this指针存储于对象的什么区域?第二题:全局指针指向static的变量是否可
技术难点?或许我水平不够吧 第一题: this指针存储于对象的什么区域? 第二题: 全局指针指向static的变量是否可以访问(我试过可以,但是为什么?) 第三题: void fun(int i=0);编译器是如何判断程序传的是默认值还是重新赋值? 第四题: 一个保存有阿拉伯数字与字母的字符串,存在重复的字符,用以下哪一种容器可以最快的统计出每个字符出现的次数? A vector B set C map D hashtable 我的疑问是在遇到这种题目时 如何去判断什么容器最合适?答案是A 为什么?为什么D不行?[解决办法] 第一题: 个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。 其它的也等答案。[解决办法] 第三题:如果没带参数则用默认的,比如fun()等同于fun(0),而带参数的用参数 第四题:map和hashtable不能处理重复数据[解决办法] 1.构造对象不会构造this指针,至于this是编译器在需要的时候提供了4个字节来保存对象的首地址。 2.这个问题很简单,你既然能指向static变量,那当然能访问,static修饰的是与程序同生命的,一直都存在 3.默认参数是静态绑定的,编译器在编译的时候就做了处理,如何处理有待考察 4.因为本题只需考虑访问速度,A支持快速访问并允许有重复元素,B不行,C和D访问速度没有A快。[解决办法]
探讨 第三题回答不到位,个人觉得。 对于第一题:既然this指针不是对象的一部分,那它存储于什么地方呢?[解决办法] 探讨 还有一题: 一串不重复的字符串,查找其中的一个字符,用什么容器最合适? A set B map C list D vector(以排好序) 用二分法进行查找[解决办法] 对于第四题,你们具体做法是怎么样的?
[解决办法] 探讨 引用: 1.构造对象不会构造this指针,至于this是编译器在需要的时候提供了4个字节来保存对象的首地址。 2.这个问题很简单,你既然能指向static变量,那当然能访问,static修饰的是与程序同生命的,一直都存在 3.默认参数是静态绑定的,编译器在编译的时候就做了处理,如何处理有待考察 4.因为本题只需考虑访问速度,A支持快速访问并允许有重……[解决办法] 对于第四题:
vector :0(n)*0(1)
set 不行。
map: 0(n)*查找时间
hashtable : 0(n)*查找时间
[解决办法] C/C++ code//test.cppstatic int m = 10;int *p = &m;//main.cpp#include<iostream>extern int m;extern int *p;int main(){ std::cout << m << std::endl; std::cout << *p << std::endl; return 0;}//I:\learn C++\Learn C++\main.cpp|6|undefined reference to `m'|[解决办法] 探讨 对于第四题: vector :0(n)*0(1) set 不行。 map: 0(n)*查找时间 hashtable : 0(n)*查找时间[解决办法] 是违反了本意,我只是解释可以访问的问题。[解决办法] 第四题应该是hashtable[解决办法] 1. object.fun(args) --> xxxxfunoooo(&object, args) this == &object 不保存 2. static变量和全局变量都在进程空间的全局表中,而不是在栈或堆 3. fun(i=0) --> xxoofun_voidoooo, xxoofun_intoooo 4. hashtable[解决办法] 第四题你们看懂题没? 还hash,map,有重复数据能用map和hash?存都存不了[解决办法] 第四题当然map和hashtable都可以,只不过没有vector快 关键都是建立char->int的映射 因为关键字是字符加数字,很容易一一对应为数字(数组下标),所以vector实现最简单------解决方案--------------------
this 在栈中, 你如果看过反汇编就知道了 说白了就是你的对象的那块内存的地址,,, 对象名字知道了 如果求地址,可以lea ecx, [ 对象的名字] mov 4字节的临时内存,ecx 在vs2010下,是这样的一个情况。探讨 第三题回答不到位,个人觉得。 对于第一题:既然this指针不是对象的一部分,那它存储于什么地方呢?,[解决办法] 探讨 第四题你们看懂题没? 还hash,map,有重复数据能用map和hash?存都存不了[解决办法] ++ 如果类中含类的指针, 尽管成员函数后加了const,那么也是可以修改这个类的指针所指向的那块内存。。。。 只要这个指针的值保持不变即可。探讨 引用: 第三题回答不到位,个人觉得。 对于第一题:既然this指针不是对象的一部分,那它存储于什么地方呢? this指针(非左值)是一个隐藏的参数.实际上调用普通成员函数时,会额外多传一个参数,你在成员函数内访问成员都是通过这个指针参数访问的.成员函数后面的const修饰的也是这个指针.成员函数和普通函数就这点区别.[解决办法] 探讨 引用: 第四题你们看懂题没? 还hash,map,有重复数据能用map和hash?存都存不了 你懂map不? ++map[a];[解决办法] 探讨 第四题: 一个保存有阿拉伯数字与字母的字符串,存在重复的字符,用以下哪一种容器可以最快的统计出每个字符出现的次数? A vector B set C map D hashtable 我的疑问是在遇到这种题目时 如何去判断什么容器最合适?答案是A 为什么?为什么D不行? //vector快,时间log(n) //安全运行的限定条件:入参有效,且输入字符串长度小于2G void……