2017-07-02 52 views
-4

我需要幫助搞清楚爲什麼當我運行這段代碼將打印 (8,8)(8,8)(0,8)(7,8)(6,8)(5,8)(4,8 )(3,8)(1,8)(0,8)(8,8)在屏幕上。 我不知道如何遞增和遞減運營商在功能上g迭代器uv工作。 我知道集將有元素0,1,3,4,5,6,7,8,但我不明白怎麼「走」過的作品集。此代碼將在屏幕上打印什麼?

template <typename T> 
std::complex<double> g(T &u, T &v) { return {*--u, *v++}; } 

std::set<int> s{3, 8, 4, 7, 0, 1, 1, 5, 7, 3, 6}; 
std::set<int>::iterator v(s.begin()), w(s.end()); 
while (v != w) std::cout << g(v, w) << " "; 
std::cout << std::endl; 
+1

您需要使用一些調試方法即可。使用打印調試或使用調試器,並在程序運行時逐行瀏覽程序。這就是你看到程序內部發生了什麼。 – Carcigenicate

+0

當*你*運行它時,它打印什麼?你期望什麼?請編輯您的問題以包含它。 –

+0

我沒有做到這一點,但我還是不明白爲什麼迭代器V具有的8 – Lamija37

回答

2

你遞減s.begin()和遞增s.end()。這兩種結果未定義行爲

+0

恆定值,這不是我的代碼。這是對我考試的一個問題,我不得不寫這個部分會做什麼。我明白當我遞減s.begin(v)時會發生什麼,但我不明白w函數中會發生什麼。 – Lamija37

+1

@ Lamija37我想說的唯一正確答案是*「由於未定義的行爲而不可能預測」*。如果你想知道發生了什麼,爲什麼不看看標準庫代碼? – HolyBlackCat