问题描述
我想使用2指针技术来查找使用c ++多集容器求和成一定值的一对数字。
但是为什么当我的程序中的迭代器l和迭代器r到达同一元素时,while循环不会停止?
int main() {
multiset<int>st={3,2,1};
int value =6;
auto l=st.begin();
auto r=st.end()--;
while(l!=r){
if(*l+*r<value){
L++;
}
else if(*l+*r>value){
r--;
}
else{
cout<<*l<<" "<<*r<<endl;
break;
}
}
}
当l和r彼此相邻时如何使迭代器停止,并在else条件上添加break,当两者都指向同一元素时,迭代器停止,因此两个迭代器都返回而不是2个不同的数字相同的数字。
解决方法
您需要在else块中添加break;
,一旦达到配对,您就不再进行迭代,因此陷入无穷循环...或在else块中移动其中一个迭代器
但是为什么当我的程序中的迭代器l和迭代器r到达同一元素时,while循环不会停止?
这是因为并非所有迭代器都是可比较的。迭代器有五种类型:前向,随机访问,双向,输入和输出。只能以您要在程序中进行的方式比较只有输入迭代器。
查看更多信息:http://www.cplusplus.com/reference/iterator/
当l和r彼此相邻时如何使迭代器停止,并在else条件上添加break,当两者都指向同一元素时,迭代器停止,因此两个迭代器都返回而不是2个不同的数字相同的数字。
我认为您应该看看std::distance,它会给您迭代器之间的距离。您将使用它来检测迭代器何时彼此相邻,即距离为1。