2013-10-22 57 views
0

在函數裏,我有一個while循環,看起來像下面這樣:指定索引範圍

void unpack(std::vector<std::string>& leftcol, std::vector<std::string>& rightcol, std::vector<std::string> origv, std::string perm) { 
    .... 
    while(perm != origv[0] && perm != origv[1]) 
    .... 
} 

我希望做的是在origv比較perm的每個元素。但是,如果我按順序執行,while循環將永遠循環。其原因是燙髮是排列的,直到它匹配origv元素之一。只有一個匹配。

有沒有辦法設置permorigv中的每個元素進行比較而沒有循環遍歷向量?

因此,如果origv有三個元素,我希望能夠以上述代碼對兩個元素的相同方式檢查每個元素對perm

要清楚,我想要說的是,我不能做這樣的事情:

for(std::vector<std::string>::size_type i = 0; i < origv.size(); i++) 
    while(perm != origv[i]) 
+0

leftcol'和'rightcol'?他們正在驚嚇 – P0W

+0

@ P0W。直到循環結束時才使用它們,所以不介意這些。 – Ares

+0

要清楚,你想要'while(perm不在原始){做某事}',對吧? – Kaiged

回答

1

我不明白,你所描述的約束,但方式來測試對象是否與某個集合中的某個元素相比是否使用std::find

while (std::find(origv.begin(), origv.end(), perm) == origv.end()) { 
    // perm not found 
} 
+0

基本上我改變'perm'直到它匹配矢量的一個字符串元素。矢量中只有一個元素在無數次改變後都能正確匹配。無論如何,你的方法工作。謝謝。 – Ares

+0

@Dochevsky請確保你沒有[XY問題](http://meta.stackexchange.com/q/66377/232397) – P0W

+0

@Dochevsky - 所以,你正在修改'perm'的循環?這就說得通了。 –