m******d 发帖数: 75 | 1 下面的程序:
Node* head;
vector< list > ret;
list li;
ret.push_back(li);
li.push_back(head);
发现head并没有被push进ret里的li, 必须先改变li再push_back(li)?
另外,为什么不能list li = NULL; 初始化为 NULL?
Thanks |
g*********e 发帖数: 14401 | 2 当你push_back(a)的时候,就是给a做了一份copy,然后把copy push进去了。
你先li.pushback(head);
再ret.pushback(li);
这样就行了。
另外list li = list(); // object 无法赋值为空"指针"
我看还是乖乖用java吧 |
p***o 发帖数: 1252 | 3 你倒数第二句跟不写没区别 ...
不过上来就学Java/Python没用过C/C++的理解值语义确实要花时间。
【在 g*********e 的大作中提到】 : 当你push_back(a)的时候,就是给a做了一份copy,然后把copy push进去了。 : 你先li.pushback(head); : 再ret.pushback(li); : 这样就行了。 : 另外list li = list(); // object 无法赋值为空"指针" : 我看还是乖乖用java吧
|
N******K 发帖数: 10202 | 4 lol
【在 m******d 的大作中提到】 : 下面的程序: : Node* head; : vector< list > ret; : list li; : ret.push_back(li); : li.push_back(head); : 发现head并没有被push进ret里的li, 必须先改变li再push_back(li)? : 另外,为什么不能list li = NULL; 初始化为 NULL? : Thanks
|
m******d 发帖数: 75 | 5 Thanks.
没学过java,学了c,又学c++, 惭愧...
【在 g*********e 的大作中提到】 : 当你push_back(a)的时候,就是给a做了一份copy,然后把copy push进去了。 : 你先li.pushback(head); : 再ret.pushback(li); : 这样就行了。 : 另外list li = list(); // object 无法赋值为空"指针" : 我看还是乖乖用java吧
|
d****n 发帖数: 12461 | 6 “另外list li = list(); // object 无法赋值为空"指针"”
这是啥意思?
【在 g*********e 的大作中提到】 : 当你push_back(a)的时候,就是给a做了一份copy,然后把copy push进去了。 : 你先li.pushback(head); : 再ret.pushback(li); : 这样就行了。 : 另外list li = list(); // object 无法赋值为空"指针" : 我看还是乖乖用java吧
|
t*****n 发帖数: 4908 | 7 stackoverflow里面有一堆的回答。建议google先。
【在 m******d 的大作中提到】 : 下面的程序: : Node* head; : vector< list > ret; : list li; : ret.push_back(li); : li.push_back(head); : 发现head并没有被push进ret里的li, 必须先改变li再push_back(li)? : 另外,为什么不能list li = NULL; 初始化为 NULL? : Thanks
|
t**r 发帖数: 3428 | 8 object of a class cannot be NULL.
you can set any pointer to NULL.
clear?
【在 d****n 的大作中提到】 : “另外list li = list(); // object 无法赋值为空"指针"” : 这是啥意思?
|
z*******6 发帖数: 133 | |
d****n 发帖数: 12461 | 10 还是不懂。list li有啥问题?
【在 t**r 的大作中提到】 : object of a class cannot be NULL. : you can set any pointer to NULL. : clear?
|
|
|
m******d 发帖数: 75 | 11 对,当时就是这个地方犯晕了
【在 z*******6 的大作中提到】 : li 本身并不是指针,是包含指针的list
|
g*********e 发帖数: 14401 | 12 没问题 这里call了他的默认构造函数
【在 d****n 的大作中提到】 : 还是不懂。list li有啥问题?
|
t*******d 发帖数: 30 | 13 welcome to C++ realm, Java guy:D |
z*******6 发帖数: 133 | 14 // Node* head;
// vector< list > ret;
// list li;
// ret.push_back(li);
// ^^^^^^^^^^^^^^^^^
// li.push_back(head);
//ret.push_back(li);
现在ret.head() 可以认为是 li_copy, li_copy = li( 调用list 的operator =).
FYI, 如果函数参数是个list/vector etc, 每次调用都要copy, 所以 ... :) |
s******u 发帖数: 501 | 15 语法问题别人都帮你解释了
但是更要紧的是你的设计问题,也就是说,你这段代码想干嘛?
做链表的话直接list就可以了,没有特别的需求不要用指针了
或者你直接用struct Node{ } 来做,不要牵扯到list
看起来像是你想用C++的工具来写C的程序,但是记得C++和C是完全不同的两个语言
【在 m******d 的大作中提到】 : 下面的程序: : Node* head; : vector< list > ret; : list li; : ret.push_back(li); : li.push_back(head); : 发现head并没有被push进ret里的li, 必须先改变li再push_back(li)? : 另外,为什么不能list li = NULL; 初始化为 NULL? : Thanks
|
g*********e 发帖数: 14401 | 16
有时候node本身很大,你都存到一个list里面开销太大。只存指针也可行。或者存一个
wrapper object.
【在 s******u 的大作中提到】 : 语法问题别人都帮你解释了 : 但是更要紧的是你的设计问题,也就是说,你这段代码想干嘛? : 做链表的话直接list就可以了,没有特别的需求不要用指针了 : 或者你直接用struct Node{ } 来做,不要牵扯到list : 看起来像是你想用C++的工具来写C的程序,但是记得C++和C是完全不同的两个语言
|
s******u 发帖数: 501 | 17 node放在别的地方也是占用内存,为什么不直接放在list里面呢。而且list的增删操作
都不会挪动已有的数据,基本上是没有额外开销的,我觉得直接用list应该问题不大
回头又看了一下你的程序,里面还有个vector>,是不是想用固定的几个node重
新排列组合成不同的链表放到vector里面么?那样子到确实只能用指针。。。不过也建
议用smart pointer。C++里面的裸体指针不是很好的practice
【在 g*********e 的大作中提到】 : : 有时候node本身很大,你都存到一个list里面开销太大。只存指针也可行。或者存一个 : wrapper object.
|
g*********e 发帖数: 14401 | 18
比如你有个graph of nodes,你想搞bfs,那就得在一个list里存node的指针。
【在 s******u 的大作中提到】 : node放在别的地方也是占用内存,为什么不直接放在list里面呢。而且list的增删操作 : 都不会挪动已有的数据,基本上是没有额外开销的,我觉得直接用list应该问题不大 : 回头又看了一下你的程序,里面还有个vector>,是不是想用固定的几个node重 : 新排列组合成不同的链表放到vector里面么?那样子到确实只能用指针。。。不过也建 : 议用smart pointer。C++里面的裸体指针不是很好的practice
|
s******u 发帖数: 501 | 19 同意,这个没有问题,要么用指针要么用引用要么用index
我的意思是用STL container来维护node的life-cycle,而不是交给developer用bare
pointer来手动的new/delete
【在 g*********e 的大作中提到】 : : 比如你有个graph of nodes,你想搞bfs,那就得在一个list里存node的指针。
|
N******K 发帖数: 10202 | 20 做mesh之类的 参考 openmesh
我最新写了一个mesh类 用c++
【在 g*********e 的大作中提到】 : : 比如你有个graph of nodes,你想搞bfs,那就得在一个list里存node的指针。
|