由买买提看人间百态

topics

全部话题 - 话题: 指针
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
i**********e
发帖数: 1145
1
我想就是利用两个前后指针扫描,然后首先可以用简单的 linear search 来寻找重复
的。直到后指针与前指针的距离为 26,那也意为着有 26 个连续的空位。这时候就把
后指针指向和之后的所有元素往前移 26位,然后利用最后的 26 空位来当 hash。
也就是 grass 所说的是从 string1 里删除了二十六个重复的字母之后,利用剩下的二十六
个空位来当作hash来用。
这是考虑到 string1 的长度非常长。但是有一个最坏情况就是万一很久都没碰上重复的字母怎么办?抑或是 string1 产生重复的个别字母不超过 string2 的长度?那这基本上就跟 worst case 一样,26*n 的比较次数,那还不如把 string2 排好序,然后做 binary search。
一些常见面试题的答案与总结 -
http://www.ihas1337code.com
m**q
发帖数: 189
2
来自主题: JobHunting版 - 问道老题
darksteel这方法很赞啊,我开始只想出了O(nmL*lgm)的
我理解他的方法大概是这样的
先把big string分成长为L的段,一共有n/L段,在trie中查找
每一段需要O(L),共n/L段则需要 O(n)。用前后两个指针扫描
big string,用一个长度为m的数组标识当前在sliding window
中出现的段的index,如果发现重复的则递增后指针,否则递增
前指针,如果签后指针差为L的话则认为找到
因为分段可以从0,1,2,...L-1开始分,共有L种分法,所以
总的复杂度为O(nL)
不知道说明白了没有
j*p
发帖数: 115
3
来自主题: JobHunting版 - 请问这是什么level的面试题
刚才我想了一下,当时是说vtable的时候引出来的 他问的意思应该是 在进行类型转换
之后vtable怎么变化 比如
class Base
{
public:
virtual void v();
}
class Derived : public Base
{
public:
void v();
}
void main()
{
Drived D;
Derived *pd = &D;
Base* pb = dynamic_cast(pd);
}
本来pd指向D,D里面有一个指向Derived类的虚函数表的指针。现在被转成Base类的指针
pb了,pb还是指向D吗?印度人当时问 那个指针是不变呢还是另外copy什么什么。。。
如果是
Base B;
Base *pb = &B;
Derived* pd = dynamic_cast(pb);
pd指向B,还是要复制 B, 然后 在复制后的object里把虚函数表的指针改过来呢?
sigh~ 基本上没用过cast。。。这种题怎么复习得到嘛。。。
j*p
发帖数: 115
4
来自主题: JobHunting版 - 请问这是什么level的面试题
刚才我想了一下,当时是说vtable的时候引出来的 他问的意思应该是 在进行类型转换
之后vtable怎么变化 比如
class Base
{
public:
virtual void v();
}
class Derived : public Base
{
public:
void v();
}
void main()
{
Drived D;
Derived *pd = &D;
Base* pb = dynamic_cast(pd);
}
本来pd指向D,D里面有一个指向Derived类的虚函数表的指针。现在被转成Base类的指针
pb了,pb还是指向D吗?印度人当时问 那个指针是不变呢还是另外copy什么什么。。。
如果是
Base B;
Base *pb = &B;
Derived* pd = dynamic_cast(pb);
pd指向B,还是要复制 B, 然后 在复制后的object里把虚函数表的指针改过来呢?
sigh~ 基本上没用过cast。。。这种题怎么复习得到嘛。。。
q****x
发帖数: 7404
5
来自主题: JobHunting版 - 面试面试官错了怎么办?

指针的指针,不是两个指针。而且可以用一个指针引用,更像C++。
i*********7
发帖数: 348
6
来自主题: JobHunting版 - onsite后收到A家的拒信,面经。
要一个previous指针指向你前面遍历过的节点。
然后分三个case做。
1.上一个指针是parent。
2.上一个指针是自己的左子树。
3.上一个指针是自己的右子树。
好好想想吧
i*********7
发帖数: 348
7
来自主题: JobHunting版 - onsite后收到A家的拒信,面经。
要一个previous指针指向你前面遍历过的节点。
然后分三个case做。
1.上一个指针是parent。
2.上一个指针是自己的左子树。
3.上一个指针是自己的右子树。
好好想想吧
f**********2
发帖数: 2401
8
来自主题: JobHunting版 - 报个A家OFFER,回馈版上
1. 归并操作
public int[] Merge(int[] a, int[] b) {
int [] c = new int[ a.length()+b.length() ];
int i=0,j=0,k=0;
while (i if (a[i] else {c[k]=b[j];k++;j++}
while (i {c[k]=a[i];k++;i++;}
while (j {c[k]=b[j];k++;j++;}
return c;
}
时间O(nlgn),空间O(n)?
2 从数组的头和尾开始算和sum,若sum=SUM,输出;若sum ;若sum> SUM, 偏大了,尾指针-1; 包在一个循环里,结束条件是头指针》=尾指针。
3 开一个不小于string长度的数组,遍历string,若相同的char,统计到一起;最后遍
历数组,找第一个值为1的index,再在string里面... 阅读全帖
p*****2
发帖数: 21240
9
来自主题: JobHunting版 - 一道挺简单的题给搞砸了
被出了个经典题reverse linkedlist, 我说我刚刚被问道了。他说是吗?你做出来了吗
?我说做出来了。他说那你再写一遍吧,既然已经做了一次了,这次应该perfect才对
吧。然后去倒茶了,让我自己写。大概1,2分钟写完,大概这个样子。
PNode reverse(PNode head)
{
PNode newhead=null;
while(head)
{
PNode n=head;
head=head->next;
n->next=newhead;
newhead=n;
}
return newhead;
}
等了几分钟那人一进门就说,“二爷,你怎么写的这么复杂呢?你怎么用了这么多指针
呢?你能不能少用一些指针呢?“,
我说”你的意思是让我用一个指针变量来完成“,他说”是的,你用了太多指针了“。
我说”好吧,我看看“。
结果不看还好,越看越心惊,压力无限大,脑子短路,啥思路也没有,当即就跪了。
本来一道挺简单的题,咋做成个这样子呢?昨晚一晚没睡好,郁闷呀。
a*****s
发帖数: 1121
10
来自主题: JobHunting版 - a1b2c3d4 变abcd1234
你这个题目有歧义,首先问清楚abcd是不是要有顺序大小要求,1234也是一样,
c3a5d1 是不是要写成cad351
因为看上去是要排序的,要排序就不太可能O(n)了吧。
周一刚遇到一个偶数奇数群置换问题。确实只需要O(n)
伪代码:
1) 边界条件1: 全是字母
2) 边界条件2: 全是数字
3) 字母数字混合情况: 两个指针,一个指在字符串头,一个指在字符串尾,用
一个循环,如果第一个指针小于第二个指针(我只的是指针指的数组index大小)就循
环,循环里面怎么写,不用讲了吧。
P******r
发帖数: 842
11
来自主题: JobHunting版 - 几道F家面试题
第一题,memory O(n), time O(n)
inorder把所有数写进vector。然后用两个指针,一个从0另一个从n-1开始,哪个指的
数和target的difference大就把那个指针向中间移动一个,直到两个指针的差为m-1。
两个指针中间m个数就是了。
O******i
发帖数: 269
12
来自主题: JobHunting版 - 吐槽QuickSort的partition
zhangchi贴过代码的
http://www.mitbbs.com/article/JobHunting/32089461_3.html
其实是三个指针。不过前面两个指针就是一起走,第三个指针向中间走。
前两个指针的走法,就类似CLRS快排那节介绍的Lomuto法给数组partition
f****4
发帖数: 1359
13
不知道你想说啥。。。
C++ static 成员函数指针和非成员函数指针2者类型是不同的
class Function_pointer
{
public:
static int current(int);
int next(int n);
};
//static成员函数指针的类型是和c相同的所以不用instance就能直接调用
typedef int (*sf)(int n);
sf stcFunc= &Function_pointer::current;
cout< //非static成员函数指针的类型则要求用instance才能调用
typedef int (Function_pointer::*f)(int n);
f fp1=&Function_pointer::next;
Function_pointer myFunc;
(myFunc.*fp1)(10);
这和cast,和引用没有任何关系

case
s********r
发帖数: 403
14
如果希望 cast static成员函数指针, 需要修改函数指针的定义才能使用,
就变成楼主最初定义的那种函数指针模式。
一定要用指针去cast 调用非 static 成员函数,本身逻辑上有些奇怪,
因为,最终还是要有实例化的类才能发动,那不如直接用实例化类自身的成员函数,直
接调就是了,比如:
myFunc.update( 1, &Function_pointer::next);
改为
myFunc.update( 1, &myFunc.next);
又简单又明了
s*w
发帖数: 729
15
来自主题: JobHunting版 - Linked List Cycle II好的算法
更详细的描述如下:
圈前长a,圈长 b, 第一次相遇在圈开始的第 c 步
a+c == (2a+2c)%b
so 0 == (a+c)%b
so a+c == b
重合时,圈长 b 等于慢指针走过的步数( a+c )
重合后,快指针也变成慢指针,挪动其中一只到整个链表开头;两个指针一起开始慢(
+1)走,再相遇就是圈头, 再走的距离是 a (没要求返回这个)
s*w
发帖数: 729
16
来自主题: JobHunting版 - Linked List Cycle II好的算法
更详细的描述如下:
圈前长a,圈长 b, 第一次相遇在圈开始的第 c 步
a+c == (2a+2c)%b
so 0 == (a+c)%b
so a+c == b
重合时,圈长 b 等于慢指针走过的步数( a+c )
重合后,快指针也变成慢指针,挪动其中一只到整个链表开头;两个指针一起开始慢(
+1)走,再相遇就是圈头, 再走的距离是 a (没要求返回这个)
n*****f
发帖数: 17
17
来自主题: JobHunting版 - 发面经 回报本版
恭喜LZ!!!
题目不错,写些思路,如果有问题或者更好的思路,欢迎各位大牛指点
facebook
2. 先比较两个字符串的长度。如果相等,正向和反向分别求最长公共前缀,之和大于
等于串长-1就是similar;如果长度相差1,正向和反向分别求最长公共前缀,之和大于
等于短串的长度就是similar;否则不是similar。前两种情况可以合并一下,更简单,
O(n)
google
1. 维护两个指针从两头向中间扫
2. 每个function_name记录call的次数和总的duration time
3. parent -> child建边,入度为0的点是root,从root出发BFS或DFS
4. 同上
5. 同上
twitter
2. trie
ebay
1. 先git log找到相应时间段的commits,再用git diff找出时间段前后两次修改了哪
些file
3. ac自动机
walmartlab
1. 先看最大值能否正数,找最大的三个正数或绝对值最大的两负一正;如果不行,看
数组里有没有0;还不行就找绝对值最小的三个数
2. ^(https?:\/\/)?([\da-z\.... 阅读全帖
s******7
发帖数: 1758
18
我给你写个java的
这种前后双指针夹逼得淫荡招数一定要用熟练
public static String findLongest(String s)
{
int max=0;
int maxRight=0;
int maxLeft=0;
char c1=s.charAt(0);
int last1=0; //record last c1 position
char c2=' ';
int n=s.length();
int j=0; //后指针
for (int i=1; i {
if(s.charAt(i)==c1||s.charAt(i)==c2)
{
if(s.charAt(i)==c1) last1=i;
if(i-j>max)
{
... 阅读全帖
r*****3
发帖数: 27
19
来自主题: JobHunting版 - Amazon 面试题
O(n1+n2+n3) n1,n2,n3 是三个数组的长度
|a-b|+|b-c|+|c-a| 其实就是求 2*(最大数-最小数) (eg. 如果a>b>c, |a-b|+|b-c|+|
c-a| = 2(a-c) )
三个指针i, j, k
从头开始扫, 总是移动最小的那个指针 更新当前最小的 2*(最大数-最小数) 即可
证明正确性:
在扫的过程中, 对于三个数组中的任意一个数, 分三种情况讨论 (下面假设取出的三个
数 a>b>c)
1. 如果他作为b, 那么永远不影响最后结果
2. 如果他作为a, 在他作为a的时候, 由于一直在移动另两个指针并接近a, 肯定能扫到
那个对于a而言最大的c
3. 如果他作为c, 假设 a或者b不是自己数组中比c大的最小值, 那么肯定有在c数组还
没扫到c的时候有移动a,b数组指针的情况, 但这和假设矛盾
证明写的有点乱 求大神更好更清楚的证明
EDIT: 看错了, 应该先sort的 = =
k*******a
发帖数: 433
20
PARR应该是指向整形数组的指针;
pf应该是指向函数的指针,这个函数有一个指向整形的指针参数,返回类型为指向整形
数组的指针。
l******u
发帖数: 1174
21
来自主题: JobHunting版 - 请教一道数据结构的设计题
不就用一个Array, 每个元素放两个指针,元素的index对应key的hash值。第一个指针
指向一个linked list的头,另一个指针指向这个list的尾;这个list里面的key都有相
同的hash. (尾指针可以省去)。不知这样符合要求吗?
z*********n
发帖数: 1451
22

new
你这问的是两码事。。
你手里有 &a,a是数组名对吧,比如int a[3],a是这么定义的吧?不是int *a = b(b是
一个数组,a是一个指针,指向b数组的某个元素),对吧?
如果你手里那个是&a,这不叫指向首元素的指针。。这叫指向数组的指针。。虽然他俩
值可能一样。
如果你有一个指向数组的指针,你当然可以直接用&a的地址减去 (&a-1)的地址来计算
数组长度了,这本质就是一个sizeof(a)。就跟int * p,对p来说,p和p-1的差值就是
一个sizeof(int)一样。
简而言之,如果你有&a,这么算就是数组大小:(int(&a) - int(&a-1)) / sizeof(int)
和main函数还是其他函数无关,main函数也就是一个特殊点的其他函数而已。

发帖数: 1
23
这个和283的区别在于这个不要求保留原来非零数的顺序。
估计这个作者的思路是
左指针指向零,然后右指针的非零数覆盖左指针的值。
但是他忽略了一种情况就是右指针的值也可能指向0.
比如说[2,0,1,0]
这时候把后面的零赋值给前面就会造成错误。
可以在for循环的第二个if语句后加上:
while (nums[right] == 0) right--;
我的代码如下:
public void moveZeroes(int[] nums) {
int l = 0;
for (int n : nums) if (n != 0) nums[l++] = n;
while (l < nums.length) nums[l++] = 0;
}
j******u
发帖数: 41683
24
来自主题: PennySaver版 - 我有一个问题
“V”在英语里表示胜利,指针呈V字形,是胜利的象征。
指针同时上扬,有美学形式,令人感到欣悦。
这个时间的指针、分针、秒针像一欢呼凯旋的人,跳跃着走向你。
在这个时间,时针、分针、秒针的这三个表针的位置给人一种协调的感觉,基本上是把
表面分成了三等份,使顾客能清楚地看到表的结构。
中国传统认为十点十分代表着十全十美。
从视觉艺术上出发,比如在绘画及雕塑中,艺术家们很注意对黄金分割点的运用,一般
把人物的眼睛放在连部黄金分割点的位置。而钟表上的十点十分,也是经过艺术家、数
学家及物理学家们精心研究过的。表停在这一刻,对人所产生的艺术效果是最佳的。。
指针形状如鸟展翅,给人奋发之感。
正如广告中指出的,使人一天中最好的时刻,是最好的定点。
----------百度滴,哈哈
m**a
发帖数: 1208
25
来自主题: LeisureTime版 - 浮城之恋 26-42
Chapter 4
26
“乓!乓!乓!起床了!” 有人猛敲禁闭室的门。“哗!”禁闭室的门上的小窗打开
。“乒!乒!”从小窗外扔进手铐和脚镣,手铐和脚镣间连有铁链。“自己铐上!快点
!” 有人训斥道。
我磨磨蹭蹭地边穿衣服,边问:“早饭呢?”
“想吃早饭?先吃吃这个!”门外的人按门上的按钮。
“吱吱吱,啪!” 一道电弧从天花板窜出,我被电得跳起来,倒在地上,痛得冷汗直
下。我现在明白为何这个禁闭室是全金属的了。这天花板上吊个环型负极,地板是正极
,一接上高 压电,里头的人就淋电雨。
“喂!充饱电了吗?”外头的人又问。
“饱了!饱了!”我艰难地答道。
我的肚子真的很饿,昨天晕虫洞,能吐光的都吐了,晚饭又没吃,腹中空空,肚中的酸
水和坏水一同在翻腾。我看外头的人没注意我,将手铐挂在天花板的 负极上,脚镣钩
在门上的突起,然后大声说道:“长官!我不会用手铐和脚镣啊。”
“不会?再吃吃这个,给你的笨脑瓜充充电!”外头的人又猛按门上的按钮,结果可想
而知。他被电得飞弹出去,头撞在门对面墙上,没声了。
我从门上小窗望出去,见那看守倒在地上,头上冒血,腰上挂着一沓明晃晃的电子钥匙
牌。我想,如用这个... 阅读全帖
m**a
发帖数: 1208
26
来自主题: Prose版 - 浮城之恋 26-42 (转载)
【 以下文字转载自 LeisureTime 讨论区 】
发信人: moha (moha), 信区: LeisureTime
标 题: 浮城之恋 26-42
发信站: BBS 未名空间站 (Sat Aug 30 02:00:42 2014, 美东)
Chapter 4
26
“乓!乓!乓!起床了!” 有人猛敲禁闭室的门。“哗!”禁闭室的门上的小窗打开
。“乒!乒!”从小窗外扔进手铐和脚镣,手铐和脚镣间连有铁链。“自己铐上!快点
!” 有人训斥道。
我磨磨蹭蹭地边穿衣服,边问:“早饭呢?”
“想吃早饭?先吃吃这个!”门外的人按门上的按钮。
“吱吱吱,啪!” 一道电弧从天花板窜出,我被电得跳起来,倒在地上,痛得冷汗直
下。我现在明白为何这个禁闭室是全金属的了。这天花板上吊个环型负极,地板是正极
,一接上高 压电,里头的人就淋电雨。
“喂!充饱电了吗?”外头的人又问。
“饱了!饱了!”我艰难地答道。
我的肚子真的很饿,昨天晕虫洞,能吐光的都吐了,晚饭又没吃,腹中空空,肚中的酸
水和坏水一同在翻腾。我看外头的人没注意我,将手铐挂在天花板的 负极上,脚镣钩
在门上的突起,然后大声说道:“长官!我... 阅读全帖
l*****a
发帖数: 38403
27
来自主题: TrustInJesus版 - 基督教的美好见证(2) (转载)
【 以下文字转载自 BibleStudy 俱乐部 】
发信人: wjes (wjes), 信区: BibleStudy
标 题: 基督教的美好见证(2)
发信站: The unknown SPACE (Sat Mar 16 08:33:51 2002), 转信
第二章 科学见证

一、 超级电台――科学证实祷告的能力

史托非尔(N. J. STOVELL)是美国一位杰出的科学家。一直致力于跟
其他科学家研究原子的秘密。他亲自告诉我们一次他所经历的实例,
此事改变了他整个的人生:
我曾是一位无神论者,认为神是人们自己想象的幻影,我实在无
法相信这宇宙间有一位爱护我,能力超出我若干倍的真神。有一天我
在一家医院的大实验室中工作,做人脑波长及放射能的测定。我应允
与同伴们实施一项微妙的实验,我们想知道从生到死亡中人脑所发生
的变化。

1.祷告的能力
为达成此目的我们选了一位患脑癌的妇女作为实验的开始,我们
知道她将要死,好自己也知道,有人告诉我们这位妇女是个虔诚的基
督徒,虽然身体很差,却仍然活得很快乐、有爱心,在她死的前一刻... 阅读全帖
C*******t
发帖数: 766
28
来自主题: TrustInJesus版 - 科学证道实例
史托维尔 (N.J. STOVELL) 是美国一位杰出的科学家,过去是一位无神论,曾耗费
许多时间与精力跟其他科学家研究原子的秘密,在其工作过程中,他常遭一些无法求得
解答的问题,这些问题的答案获得之后,不但有助于科学,也改变他个人的人生观,以
下是他亲自告诉我们的一次他所经历的实例:
我曾是一位无神论者,认为神是人们自己想像的幻影,我实在无法相信有一位爱护
我,能力出我若干倍的真神。
有一天我在一家医院做大实验,我们想知道从生到死亡中人脑所发生的变化,为此
目的,我们选择一位患脑癌的妇人,在心灵及精神上她十分正常,并且大家都知道她充
满爱及愉快,但健康却十分坏,我们知道她将要死,她自己也知道,人家告诉我们这位
妇人是相信耶稣作她救主的。在她死的前一时刻我们放了一具有高度感应性的记录器在
她病房里,此仪器可以显示她死前的一霎那脑子所发生的变化。另外,在她的卧床上又
安置了一个很大的麦克风,以使我们可以听到她所讲的话,并知道她在死前是否还能讲
话。
于是我们进入隔壁的房间开始作实验,我们五位科学家中,我是最温和而心肠硬的
,我们焦急地站着等待仪器上变化的出现,但是指示器上仍无动静。我们可... 阅读全帖
Y**u
发帖数: 5466
29
来自主题: Wisdom版 - 当代南传大师及其教法
乌巴庆
毗婆舍那的最初目标是启发自身内的「活化无常」
──完全经验到真正无常,
即身心连续体很快融化,
像「掉落在湖面的雨水」,
在那时,心灵产生净化力──
或感受内在自我的无常,
最终希望能达到内、外宁静和平衡的状态,
个人全神贯注于身内无常时,
即可达成此一目标。
根据字典上意义,佛教不是个宗教,因为它不像其它所有宗教,有一中心的上帝。严格
说来,佛教是
结合身体和心灵道德规范的一套哲学体系。它的目的在于灭绝痛苦和死亡。
佛陀第一次说法的四圣谛,奠定本哲学体系。事实上,前三个圣谛阐明佛陀的哲学,而
第四个圣谛(八
正道,是道德兼哲学的一套规范)则作为达成目的的方法。这第一次说法,系对憍陈如
(Ko&n&da^n^na)
领导的五苦行者,他们是佛陀早期求道的同修。憍陈如是佛陀第一个完全证悟的弟子。
现在我们谈到四圣谛,它们是:
一、苦谛
二、集谛:苦之生起或苦之根源
三、灭谛:苦之止息
四、道谛:导致苦之止息的途径
要完全了解佛陀哲学的基本概念,需要明白苦谛。为了说明苦谛,佛陀从两个不同的角
度来探讨这问
题。
首先,利用推论过程。佛陀让弟子了解,人生是苦难,人生是痛苦的,生是痛苦,... 阅读全帖
p*********e
发帖数: 32207
30
来自主题: Apple版 - ipad配个鼠标?
笔记本电脑本来上面就有个鼠标指针吧?
所以你连上鼠标了就可以用鼠标控制那个指针然后点击操作对吧?
ipad本身图形用户界面就是基于点击的,压根没有指针这个配备
您就算真接上了鼠标,没有指针的话您打算怎么用您这个鼠标呢?
所以我说,别惦记了,不现实的.
s*****s
发帖数: 27
31
来自主题: CS版 - 请教一段话的意思
Copy bytes from the source stream to the specified buffer.
All copied bytes are consumed (that is, the read pointer is advanced).
是不是说如果原数据流里有指针数据,把指针指向的内容拷贝过来
而不是拷贝指针本身?另外,需要负责清空原数据流里的指针么?
m********o
发帖数: 796
32
【 以下文字转载自 Linux 讨论区 】
发信人: momoxinduo (馍馍), 信区: Linux
标 题: 弱弱的问个内核遍历当前进程的子进程的一小段程序
发信站: BBS 未名空间站 (Wed Aug 21 01:23:39 2013, 美东)
linux内核里遍历当前进程的子进程的一小段程序有点看不太明白
struct task_struct *task;
struct list_head *list;
/* 这里的 struct list_head 的定义是两个指向他自己的指针
* struct list_head
* {
* struct list_head *next, *prev;
* }; */
/* 下面的list_for_each宏定义
*list_for_each - iterate over a list
* @pos: the &struct list_head to use as a loop cursor.
* @head: the head for your list. */
... 阅读全帖
L*******r
发帖数: 1011
33
Google就是好用。呵呵,以后见面就说:同学,今天你google没有? :)
注:我自己没有这么做过,我的系统只要集成原来的COM系统.
http://www.aspx.cn/comm/dotnetbbs/Showtopic.aspx?Forum_ID=6&Id=5284
指针类型参数传递:
在Windows API函数调用时,大部分函数采用指针传递参数,对一个结构变量指针,我
们除了使用上面的类和结构方法传递参数之外,我们有时还可以采用数组传递参数。
下面这个函数通过调用GetUserName获得用户名
BOOL GetUserName(
LPTSTR lpBuffer, // 用户名缓冲区
LPDWORD nSize // 存放缓冲区大小的地址指针
);

[DllImport("Advapi32.dll",
EntryPoint="GetComputerName",
ExactSpelling=false,
SetLastError=true)]
static extern bool GetComputerName (
[MarshalAs(Unmana
G*****h
发帖数: 33134
34
偶觉得, 下面几点是最主要的
语法类似 C/C++ 或者 java
编译执行, 效率接近C/C++, 同时有交互式解释执行环境。
OO, 单继承, 支持 interface
静态强类型, 但支持自动类型赋值和转换。
自动生成函数原型, 不需要象C++ 里函数声明和实现两行重复的代码, class 名字要重
复出现无数次。
无自动 garbbage collection, 因为没法有效控制 GC 的时机。但是提供内存的分配释
放跟踪工具, 可以随时检查内存泄露等问题。一般要求内存尽早释放, 可以考虑在适当
的时候手工调用GC 函数回收少量泄露的内存。
有 slice 等带越界检查的数组, 最大限度避免指针的使用。即使不能完全消除指针,
指针代码必须用编译开关明确开启, 而且必须为指针指定一个变量存放其内存大小, 便
于越界检查。
有 generics 或者 C++ template
lambda 可有可无, 如果有, 必须是命名的, 不是无名函数
函数可以作为参数, 嵌套函数可有可无。
可以调用C/C++的函数库
差不多先这些, 现在的语言里 go 大概最接近
但是 go 的多线程实现... 阅读全帖
m********o
发帖数: 796
35
linux内核里遍历当前进程的子进程的一小段程序有点看不太明白
struct task_struct *task;
struct list_head *list;
/* 这里的 struct list_head 的定义是两个指向他自己的指针
* struct list_head
* {
* struct list_head *next, *prev;
* }; */
/* 下面的list_for_each宏定义
*list_for_each - iterate over a list
* @pos: the &struct list_head to use as a loop cursor.
* @head: the head for your list. */

#define list_for_each(pos, head)
for (pos = (head)->next; prefetch(pos->next), pos != (head); pos =
pos->next) ... 阅读全帖
h****8
发帖数: 599
36
来自主题: Programming版 - interview question: (RB tree vs. hash table)
table size翻倍到不一定 因为可以表中存指针,指针指向指针数组,数组
里的指针都指向动态分配的内存块,这才是真正key所在的位置 一旦满了就多分配
一块好了,不需要复制已有的元素
麻烦的是删除 而且有时候space开销太大如果hash func取得不好的话
h********n
发帖数: 1671
37
不知道哪位老前辈的code,恐怕有20年了。有几百万数据,输出是这些数据计算后的结
果。这些数据的顺序不同,输出结果也不同,但是理论上都是正确的。当初写code的人
为了得到一个canonical order,用数据的指针排序。当时没有问题,现在malloc()算
法一变,数据的指针就变了,输出的结果就和原来不一样了。用户非常不高兴,解释起
来很麻烦,所以头儿要求必须和原来的结果一致。如果只有一个地方用指针排序也就罢
了,问题是这20年来不知道有多少个地方是用指针排序的。

kernel
l********a
发帖数: 1154
38
words是个指针,指向一个指针数组,sizeof出来是指针数组的长度
再除以每个指针的长度,就是数组元素的个数了
只有[]定义的数组才能求长度吧?要是words被定义成char **words这种,就不能sizeof
求出长度了.不知道对不对
g*****g
发帖数: 34805
39
来自主题: Programming版 - 为什么java要用setter和getter
我没说那些design pattern是java独有的,指针也不是C++独有的。但很多design
pattern确实是C++实现不了的,因为没有built-in reflection和serialization.既然
本版有C++程序员认为写Java的弱是因为写不了指针,我也可以认为写C++的弱是因为不
懂design pattern。很完美的逻辑。
敢问指针跟C++有屁关系?在C++之前就没有指针了?
W*******e
发帖数: 1268
40
来自主题: Programming版 - C++是给神仙用的语言
C的指针也很多,GCC的代码往下走几层到处都是指针函数互相调用,以前Borland和VC
开放的部件代码很多也是这样的。好像用指针函数和指针对象除了灵活以外,同时能有
效的减少obj文件大小。我读过一些牛人写的程序,编译后的目标代码比源程序还小。
s*****n
发帖数: 5488
41
来自主题: Programming版 - C++是给神仙用的语言
因为有了指针,可以随便改来该去。好吧,解决它,我们来定义const.
一堆const. non-const.你说把指针去了不就是完事大吉了?
const又引出一堆的问题,const-cast啊。
然后指针导致无法正确的回收,都是一堆的解决方案,smart pointer了什么啊。
所以我说,做加法永远不如做减法,咔嚓一刀,指针切掉,世界安静了。
N******K
发帖数: 10202
42
另外 std::shared_ptr等比 intrusive smart pointer好 因为对每一个object 有一个
manager object 然后所有指针都指向 manager object
如果 object被干掉了 可以从manager object判断出来
如果多个raw指针指向一个object。 当这个object被干掉 这些 raw指针都指向垃圾
如果多个shared_ptr/weak_ptr指针通过manager object指向一个object, 当object被
干掉 这些 weak_ptr通过manager object指向Null pointer
如果每一个object都有一个指向自己的weak_ptr为成员变量 那就跟好了
I********t
发帖数: 205
43
还有,你的接口参数既然是指针的引用,不如就用指针的指针,就更省事了,也不需要
什么搞个临时指针指向头部了。
m*********a
发帖数: 3299
44
来自主题: Programming版 - 今天给c++震惊了
你这个然我想到了一个dot operator不和指针用的时候比如引用
static member的时候,就是rvalue,
->必须和指针用所以是lvalue。
和指针用的时候,肯定是lvalue. 就如楼上说的,我想不到
指针还能返回rvalue的
rvalue是 lvalue的一个subset,
接受rvalue的地方,也接受lvalue
a=1;//1 rvalue
a=b;//b lvalue
T********i
发帖数: 2416
45

一般的allocator都复杂多了,而且不能保证determinism。我的简单但是速度快。
看来allocator如何工作的,我还没解释清楚:
假定我们规定内存分配最小16 bytes,最大4G。我的free list是一个32个指针的数组
。初始化都是NULL。
假定我们分配1000 bytes。我先round up to最近的2的n次方,1024bytes。是2的10次
方。free_list[10]是NULL。则从更底层分配1024 + 16 = 1040bytes。前面16 bytes是
meta data包含size and double linked list指针。返回此块的第16 bytes的指针就好
了。
free,就把指针减16,取得meta data。知道是一个1024 bytes块。就把这个块放到
free_list[10]的link list里面好了。
下次再分配1024 bytes,如果free_list[10]里面有,直接取出。
这样,内存浪费多一些。但是每次操作优势纳秒级别。
不知道有没有,反正我自己有。C++的template,顺便把initiali... 阅读全帖
t*****n
发帖数: 4908
46
http://www.csdn.net/article/2015-08-28/2825572
简单讲,原文http://eax.me/cpp-will-never-die/是俄语,有人感兴趣,得到作者同意后,把它翻成英文。(译者:然后我再把它翻成中文。)
显而易见,这篇博文将会导致一场语言大圣战,所以,请思考两遍,确定你将会通过“
有建设性的辩论”的评论参与讨论后再开始阅读这篇文章。
再次说明原文是俄语:)
注意:进一步讲,我冒昧的认为Rust有意尝试创建一个快速并且安全的语言。毕竟,
Mozilla的人最初构思用它作为工具来开发一个浏览器引擎。如果它被证明是另外一个
仅仅安全的语言,那么我认为 它没有达成目标。那里有许多非常不同的安全语言供人
们选择和品味,如果Rust没有打算代替C++,那么:
为什么它需要包含一个不安全子集;
并且,为什么作者要抛弃Rust的轻量级进程?毕竟它们很方便,对吧?换句话说,
如果我假设错了,那么整件事情就没有讨论的意义了。
如有你碰巧偶尔逛逛linux.org.ru论坛,那么请被提醒到这篇文章没有触及为什么不喜
欢Rust的那10条纯技... 阅读全帖
r***s
发帖数: 737
47
来自主题: Programming版 - how to debug
大牛们相互鄙视完了谁也不解释。
我来冲个大头说一下我知道的一点点
异步log无非就是用户程序写进内存buffer,另外一个异步的线程负责往外写。这个
buffer大部分
时候是多个线程共用的,问题在于如何不用锁来保护这个buffer?
先说用户程序里的多个线程都要写进一个buffer,怎么防止互相覆盖? buffer维护一
个指针
write_edge,要往里写的线程知道自己要写多少字节size,然后用 atomic increment
把这个指针
往右移动:interlocked_increment(&write_edge, size), 最后在这个指针左边写入。
这样可以保证不互相覆盖。
下一步看往外写的那个线程和其他线程如何同步。 buffer物理上是带状的,有开始和
结束。把它想象成一个逻辑环,有两个指针,read_edge和write_edge,每次有人写入
write_edge 右移,往外写Log的时候read_edge右移,只要保证read_edge一直在write_
edge 后面一定安全距离就可以了。
这个实现有些问题。 很多人认为世上没有真正lock free的东西... 阅读全帖
J*****n
发帖数: 4859
48
来自主题: Programming版 - 夕甲甲 zz
欧欧匹代码的格局,是和别的编程模式不同的:首先要有一个构造函数;基类里只定义
了函数的形式,可以随时通过派生增加不同的实现。那些程序员们,每每学会了继承和
多态,便可以接一个项目,——这是十年前的事,现在至少要懂得设计模式,——靠柜
台外站着,写些代码换一个鸡蛋灌饼吃;倘若懂一些多线程的知识,便可以在鸡蛋灌饼
里加火腿肠,或者里脊了,如果懂得语言的实现原理,那就能做一些底层代码的优化,
换一盘炒菜。但这些程序员,多是初级水平,大抵没有这样深入。只有懂得内存模型的
,才能接一些底层的项目,打开调试器和剖析器,慢慢的坐着优化代码。
我从十二岁起,便在村口的githoverflow工厂里当学徒,师傅说,我逻辑思维太差,怕
学不会静态类型语言,就写些shell脚本吧。shell脚本虽然容易写,但语法容易含混不
清的地方也不少。字符串和数组的功能很弱,条件判断的语法也很奇特,有时要对特殊
字符手动做两重转义,然后通过。在这种情况下,写脚本也很为难。所以过了几天,师
傅又说我干不了这事。幸亏荐头的情面大,辞退不得,便改为专管测试的一种无聊职务
了。
我从此便整天的站在测试机前,专管运行测试脚本。虽... 阅读全帖
h*i
发帖数: 3446
49
来自主题: Programming版 - 开始教小孩写程序了
觉得变量不是难点的小孩,属于学不求甚解那种。不是说不好,不适合搞技术。
我的旧文:
数学的变量与计算机语言的变量不同。数学的变量更抽象,是真的变量。而计算机语言
的变量是假的,其实还是属性,是某个内存地址或者寄存器的属性。
一个非程序员A,第一次编程,看到变量,会很疑惑,比如我当年,“这是什么东西的
的变量啊”, variable for what? 后来明白了,原来就是一个地址可以存不同的东西啊
,明白了。指针?这不是很明显么,就是地址啊,有什么难的?
另一个非程序员B,第一次编程,看到变量,说,哦,我知道,数学上小学就学了的,
变量就是数学上的变量啊,懂了。结果看到指针,panic了,数学上没有指针啊,
到底什么是指针啊?
人和人的思维方式不一样,从对数学的态度可以看出。有的人,比如冯诺伊曼,说“
You don't need to *understand* mathematics, you just get used to it". 这种人
就是上面的非程序员B。这些人成为数学家的话,一般会成为分析学家。中国培养出的
职业数学家,大多是分析学家,比如张益唐之类,解决问题能力很强,... 阅读全帖
N********n
发帖数: 8363
50
来自主题: Programming版 - 面向数据的编程与面向对象的编程
反对封装的程序员大概没写过C语言的大项目。C的指针可以不受限制满天乱指,
用过C的人最怕指针出错。张三的指针出错指到李四的数据上。李四那边发现异
常还莫名其妙不知道咋回事,自己的代码查了半天也没找出原因。最后才明白
原来是张三的指针撒野搞乱了自己的数据,责任根本不在李四。HOHOHO
加封装就是要引入一种安全责任机制,专职代码掌控专项数据。出问题可以快
速锁定病源模块,这样做项目才有效率。甩C语言"李四纠张三的错"那种风格
几条街。反对封装的八成没吃过C语言的苦。
首页 上页 1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)