2014-02-15 56 views
0

我有一個set 4個矩形。每個矩形是長度爲&寬度的pair<int, int>。 我嘗試產生這個集合的排列。但是,當我嘗試運行它時,此代碼會引發段錯誤 。我無法弄清楚這個問題。在C++中創建集合的排列時遇到問題

下面的代碼:

void permute(set<pair<int, int> >& rectangles, vector<pair<int, int> >& sequence) { 
    if(rectangles.empty()) { 
     // read this sequence. 
     return; 
    } 
    set<pair<int, int> >::iterator rect; 
    for(rect = rectangles.begin(); rect != rectangles.end(); rect++) { 
     rectangles.erase(*rect); 
     sequence.push_back(*rect); 
     permute(rectangles, sequence); 
     sequence.pop_back(); 
     rectangles.insert(*rect); 
    } 
} 

回答

1

rectangles.ersase(*rect);呼叫中的所有迭代器無效的元素(見reference)。這意味着你不能在循環的其餘部分取消引用迭代器。

你需要調用擦除之前的值複製,並使用它複製提領該迭代的:

pair<int, int> copy = *rect; 
rectangles.erase(rect); 
sequence.push_back(copy); 
permute(rectangles, sequence); 
sequence.pop_back(); 
rectangles.insert(copy); 
+0

謝謝。就是這樣! – saket

+0

嗨,在上面的代碼片段中,更改'對'無處不在'int'導致分段錯誤,儘管您的更正。任何想法爲什麼? – saket

相關問題