2013-12-07 68 views
0
for(set<int> it = my_set.begin; it!= my_set.end; ++it) 
for(set<int> other = next(it); other != my_set.end; ++other) 

這將不會編譯,因爲std :: next有關如何實現這樣的循環的任何建議?我也嘗試使用advance,但它也不起作用。 (注意我知道循環中有一些語法錯誤)。請勿啓用庫函數。雙向迭代器Next

+1

能否請你上你更清晰」重新嘗試實現以外的其他方式來編譯它? – 2013-12-07 21:34:42

回答

1

在C++ 03可以使用預先這樣說:

for(std::set<int>::iterator it = my_set.begin(); it != my_set.end(); ++it) { 
    std::set<int>::iterator copy = it; 
    std::advance(copy, 1); 
    for(; copy != my_set.end(); ++copy) { 
     std::cout << *copy << std::endl; 
    } 
} 

在C++ 11可以使用未來代替:

for(auto it = my_set.begin(); it != my_set.end(); ++it) { 
    for(auto other = std::next(it); other != my_set.end(); ++other) { 
     std::cout << *other << std::endl; 
    } 
} 
+0

在第一個示例中,「++複製」看起來更簡單。 –

+0

不工作接下來不會編譯...。我結束了在第二個循環中使用反向迭代器,並停止* other == *它 –

+0

@GoBlue就像我說的,它需要C++ 11,所以你能解釋'你不會編譯'的意思嗎? – 2013-12-07 22:57:51