Redian新闻
>
请教一个MS Linked List的问题
avatar
请教一个MS Linked List的问题# Programming - 葵花宝典
S*t
1
MS自己做了一个List class,详情在这里:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrfList_header_file.asp
我现在的一个问题是,分不清list.front()与list.begin()这两个Function的区别。请大
家帮我看看。两个函数的说明在上面提供的网址上List的分目录Classes里。
另一个问题是:
假设ABC是一个Struct数据类型,我定义一个List,把ABC串起来,
ABC aa;
List dd; 假设dd里已经有数据了
aa = dd.front(); 这个是什么?因为我看MS的说明front好象返回的是指针啊。
接着下面我再定义一个iterator
list::iterator ii = dd.begin();
aa = *ii; 请问这个aa的值与上面的aa的值是一样的吗?
谢谢!!!
avatar
m*n
2
list是C++ Standard library的,不独是MS的。
dd.front() 返回dd第一个element的reference,不是pointer.
list::iterator ii = dd.begin();
(*ii)和dd.front()都是dd第一个element的reference,所以他们的值是一样的。



【在 S*********t 的大作中提到】
: MS自己做了一个List class,详情在这里:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrfList_header_file.asp
: 我现在的一个问题是,分不清list.front()与list.begin()这两个Function的区别。请大
: 家帮我看看。两个函数的说明在上面提供的网址上List的分目录Classes里。
: 另一个问题是:
: 假设ABC是一个Struct数据类型,我定义一个List,把ABC串起来,
: ABC aa;
: List dd; 假设dd里已经有数据了
: aa = dd.front(); 这个是什么?因为我看MS的说明front好象返回的是指针啊。
: 接着下面我再定义一个iterator
: list::iterator ii = dd.begin();

avatar
Q*g
3
不对。
1. iterator 是一个object,不是一个指针。Iterator类重载了* operator,所以你能用
*ii 来dereference.
2. reference 就是reference,可以理解成"alias"。跟指针或者地址是有区别的。
aa = dd.front();
dd.front() 返回一个放在LIST里的第一个object的reference,然后发生的assignment
(=),是把那个object的内容拷贝了一份给aa(当然你可以overload = 做其它的事情)。
aa并不是一个reference。assignment之后它有了一个独立的copy。尤其不能理解成aa
就是指向哪个object的地址。
3. copy constructor 和 assignment. 如果你定义变量的同时初始化,是copy
construct.
定义后赋值,则是assignment
ABC aa = dd.front(); // copy constructor is invoked.
ABC aa; //default

【在 S*********t 的大作中提到】
: MS自己做了一个List class,详情在这里:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrfList_header_file.asp
: 我现在的一个问题是,分不清list.front()与list.begin()这两个Function的区别。请大
: 家帮我看看。两个函数的说明在上面提供的网址上List的分目录Classes里。
: 另一个问题是:
: 假设ABC是一个Struct数据类型,我定义一个List,把ABC串起来,
: ABC aa;
: List dd; 假设dd里已经有数据了
: aa = dd.front(); 这个是什么?因为我看MS的说明front好象返回的是指针啊。
: 接着下面我再定义一个iterator
: list::iterator ii = dd.begin();

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。