其實今天想嘗試一下容器和迭代器的使用,但是卻感受到了其他一些問題的重要性,就是對於臨時物件的一些理解,有時候我們認為關於乙個mian函式種的臨時定義是很方便的,可以暫時為我們儲存一下物件,可以作為乙個臨時物件,不管是int,char還是string,還是其他自定義物件的臨時儲存,關鍵是討厭的指標……
很簡單的乙個例子,其實就是輸入pair,然後轉存到vector中,開始的時候我用的是vector定義,畢竟存個物件很簡單
#include
#include
#include
#include
using namespace std;
int main()
for (vector::iterator iter = evec.begin(); iter != evec.end();++iter)
當然可以正常執行,呵呵,畢竟很簡單的思路,後來我想要不在vector存指標吧,如vector,所以就
int main()
for (vector::iterator iter = evec.begin(); iter != evec.end();++iter)
{cout<<(**iter).first<<"..."<<(**iter).second《結果可想而知,輸出的物件其實都是最後一次你輸入的資料,本人腦子轉的慢,起初認為是迭代器出問題,但是後來細想下,在容器輸出中加入語句
cout<<*iter《結果發現位址其實是一樣的,也就是說我在容器中存入的所有物件的位址都是一樣的,均是是最後一次輸入對像的位址,但是如果一開始就跟蹤的話,我們發現這就是我們臨時物件的位址,從我們第一次輸入物件就使用這個位址,直到最後一次輸入,我們反覆的使用這一位址,不停地在同一位址進行反覆的新建物件,呵呵!很愚蠢的行為。。。
所以我們應該。。。
element* element;
element = new element;
*element = make_pair(name,age);
evec.push_back(element);
所有有時我們應該對拷貝位址指標的情況稍微注意一下
小問題大思考之C 臨時物件
c 中有這樣一種物件 它在 中看不到,但是確實存在。它就是臨時物件 由編譯器定義的乙個沒有命名的非堆物件 non heap object 為什麼研究臨時物件?主要是為了提高程式的效能以及效率,因為臨時物件的構造與析構對系統效能而言絕不是微小的影響,所以我們應該去了解它們,知道它們如何造成,從而盡可能...
關於C 中的臨時物件問題
關於c 中的臨時物件問題 c 中真正的臨時物件是看不見的,它們不出現在你的源 中,臨時物件的產生在如下幾個時刻 1.用建構函式作為隱式型別轉換函式時,會建立臨時物件。例 class integer integer private int m val void calculate integer it...
臨時物件的生成
class crectangle crectangle int i 1,int j 2 crectangle static void printtotal void print protected private int w,h static int ntotalarea static int nt...