2013-10-22 58 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'的循环?这就说得通了。 –