天天看點

STL中容器的push()或者push_back()函數的一點說明

在stl的queue 或者

vector、list等容器擴充卡或者容器中,會經常用到的函數就是push()或者push_back()函數,但是有一點需要明确的是:

在使用這些函數對容器/擴充卡對象增加新元素的時候,實際上是對原有的元素對象複制重新建立了一個元素對象作為元素壓入到容器/擴充卡對象中。

例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<code>#include&lt;queue&gt;</code>

<code>#include&lt;iostream&gt;</code>

<code>using</code>

<code>space std;</code>

<code>typedef</code>

<code>struct</code> <code>treenode{</code>

<code>      </code><code>int</code>

<code>a;</code>

<code>      </code><code>float</code>

<code>b;</code>

<code>}tnode;</code>

<code>int</code>

<code>main()</code>

<code>{</code>

<code>    </code><code>queue&lt;tnode&gt; allnodes;</code>

<code>    </code><code>tnode origin;</code>

<code>     </code><code>origin.a =1;</code>

<code>     </code><code>origin.b =2.2;</code>

<code>     </code><code>allnodes.push(origin);</code>

<code>     </code><code>allnodes.front().a=4;</code>

<code>     </code><code>allnodes.front().b=5.5;</code>

<code>     </code><code>cout&lt;&lt;origin.a&lt;&lt;</code><code>", "</code><code>&lt;&lt;origin.b&lt;&lt;endl;</code>

<code>}</code>

 實驗測試會發現,此時origin内的值并不會發生改變。

如果想對原來的origin的值進行同步修改,可以講隊列聲明為元素為指針類型的隊列:

<code>queue&lt;tnode*&gt; allnodes;</code>