首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

技术难点?或许小弟我水平不够吧

2012-03-24 
技术难点?或许我水平不够吧第一题: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……

热点排行