zen*_*nna 4 c++ iterator stl set
我有一组整数,我想迭代所有唯一的整数值对,其中我认为val1,val2和val2,val1是唯一的,我应该只看到那个组合一次.
我在python中编写了这个,我使用列表的索引(簇):
for i in range(len(clusters) - 1):
for j in range(i+1,len(clusters)):
#Do something with clusters[i],clusters[j])
Run Code Online (Sandbox Code Playgroud)
但没有索引我不知道如何使用stl set和迭代器实现相同的功能.我试过了:
for (set<int>::iterator itr = myset.begin(); itr != myset.end()-1; ++itr) {
cout << *itr;
}
Run Code Online (Sandbox Code Playgroud)
但由于迭代器没有 - 运算符,因此失败.
我怎样才能做到这一点,或者我必须使用不同的容器?
以下几行中的内容如何:
for(set<int>::const_iterator iter1 = myset.begin(); iter1 != myset.end(); ++iter1) {
for(set<int>::const_iterator iter2 = iter1; ++iter2 != myset.end();) {
{
std::cout << *iter1 << " " << *iter2 << "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
这会产生所有N*(N-1)/2唯一对,其中N是集合中的整数数.
顺便说一下:const_iterator无论何时迭代容器而不修改任何东西,都要使用a ,它的风格很好,可能有更好的性能.
编辑:修改代码以反映Steve Jessop提出的建议.