⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_52572.htm

📁 vc
💻 HTM
字号:
<p>
序号:52572 发表者:Rikcuo Akira 发表日期:2003-09-12 10:25:06
<br>主题:union problem
<br>内容:執行結果:<BR><BR>rolekind = 1&nbsp;&nbsp;speed =&nbsp;&nbsp;1 tmp1 = 1077936128 tmp2 = 1077936128 tmp3 = 3<BR>rolekind = 2&nbsp;&nbsp;speed =&nbsp;&nbsp;2 tmp1 = 1077936128 tmp2 = 1077936128 tmp3 = 3<BR>rolekind = 3&nbsp;&nbsp;speed =&nbsp;&nbsp;3 tmp1 = 1082130432 tmp2 = 1082130432 tmp3 = 4<BR>after sort<BR>rolekind = 3&nbsp;&nbsp;speed =&nbsp;&nbsp;3<BR>rolekind = 2&nbsp;&nbsp;speed =&nbsp;&nbsp;2<BR>rolekind = 1&nbsp;&nbsp;speed =&nbsp;&nbsp;1<BR>Press any key to continue<BR><BR>為何設定tmp3後tmp1,tmp2的數值會改變?<BR><BR><BR>////Source code<BR><BR>// test2.cpp : Defines the entry point for the console application.<BR>//<BR><BR>#include &lt;iostream&gt;<BR>#include &lt;list&gt;<BR><BR>using namespace std;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>class role<BR>{<BR>public:<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;int speed;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int rolekind;<BR>&nbsp;&nbsp;&nbsp;&nbsp;typedef union<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int tmp1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long tmp2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float tmp3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;} type_mix;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;type_mix foot;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;role(){};<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;role(int _rolekind,int _speed,int _foot)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rolekind=_rolekind;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speed = _speed;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foot.tmp1=_foot;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foot.tmp2=_foot+1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foot.tmp3=_foot+2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;};<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;bool operator == (const role&amp; x) const <BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return rolekind==x.rolekind;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;bool operator &lt;(const role&amp; x) const<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return speed &gt; x.speed;<BR>&nbsp;&nbsp;&nbsp;&nbsp;};<BR><BR>};<BR><BR>template &lt;class T&gt;<BR>class mycomp<BR>{<BR>public:<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;enum cmp_mode { normal,reverse};<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;cmp_mode mode;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;mycomp(cmp_mode m=normal):mode(m)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;bool operator() (const T&amp; t1,const T&amp; t2) const <BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (mode==normal)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return t1.speed &lt; t2.speed ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return t1.speed &gt; t2.speed;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>};<BR><BR>class mysort<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;bool operator() (const role&amp; x, const role&amp; y) const <BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return x &lt; y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>};<BR><BR>bool test(const role&amp; x,const role&amp; y) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return x &lt; y;<BR>};<BR><BR>template&lt;class _Ty&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct greater2 : binary_function&lt;_Ty, _Ty, bool&gt; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;bool operator()(const _Ty&amp; _X, const _Ty&amp; _Y) const<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{return (_X &gt; _Y); }<BR>&nbsp;&nbsp;&nbsp;&nbsp;};<BR><BR>template&lt;&gt; <BR>bool greater&lt;role&gt;::operator()(const role &amp;r1,const role &amp;r2) const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return r1.speed&gt;r2.speed;<BR>};<BR><BR>class greater3 : public std::greater&lt;role&gt;<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;bool operator() (const role&amp; x, const role&amp; y) const<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return x.speed &gt; y.speed;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>};<BR><BR><BR>int main(int argc, char* argv[])<BR>{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;std::list&lt;role&gt; role_list;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;role_list.push_back(role(1,1,1));<BR>&nbsp;&nbsp;&nbsp;&nbsp;role_list.push_back(role(2,2,1));<BR>&nbsp;&nbsp;&nbsp;&nbsp;role_list.push_back(role(3,3,2));<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;std::list&lt;role&gt;::iterator pos;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;for (pos=role_list.begin();pos!=role_list.end();++pos)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;role a=*pos;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; &#34;rolekind = &#34; &lt;&lt; pos-&gt;rolekind <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt; &#34;&nbsp;&nbsp;speed =&nbsp;&nbsp;&#34; &lt;&lt; pos-&gt;speed <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt; &#34; tmp1 = &#34; &lt;&lt; pos-&gt;foot.tmp1 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt; &#34; tmp2 = &#34; &lt;&lt; pos-&gt;foot.tmp2 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt; &#34; tmp3 = &#34; &lt;&lt; pos-&gt;foot.tmp3 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;role_list.sort(greater3());&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//role_list.sort() 以operator&lt;為準則,對所有元素排列<BR>&nbsp;&nbsp;&nbsp;&nbsp;//role_list.sort(op) 我想以op為準則,對所有元素排列的話,op函數的形式要如何寫??<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; &#34;after sort &#34; &lt;&lt; endl;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;for (pos=role_list.begin();pos!=role_list.end();++pos)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; &#34;rolekind = &#34; &lt;&lt; pos-&gt;rolekind <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&lt; &#34;&nbsp;&nbsp;speed =&nbsp;&nbsp;&#34; &lt;&lt; pos-&gt;speed &lt;&lt; endl;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR>}<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:a dog 回复日期:2003-09-12 11:39:41
<br>内容:union在某一时刻只能存放一个值,<BR>设定tmp3後tmp1,tmp2的值就会丢失。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:飞翔的瞳眸 回复日期:2003-09-12 11:43:59
<br>内容:union表示所有成员共用一块内存,你对任何成员赋值就是改写这一地址上的内容.当然所有成员的值都会相应的变化.<BR>&nbsp;&nbsp;&nbsp;&nbsp;
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -