集合迭代器的加号运算符不起作用



这工作正常,但看起来很丑陋

#include <iostream>
#include <set>
#include <set>
int main ()
{
    std::set<int> v;
    for(int i=0;i<5;i++)
    {
        v.insert(i);
    }
    for(std::set<int>::iterator it1 = v.begin(); it1!=v.end(); ++it1)
    {
        std::set<int>::iterator it2=it1;
        std::advance(it2,1);
        for(; it2!=v.end(); ++it2)
        {
           std::cout<<*it1<<" "<<*it2<<std::endl;
        }
    }
    return 0;
}

这无法编译,因为 set::itrator 没有 + 运算符,这是为什么? 有没有一种优雅的方法解决这个问题?

#include <iostream>
#include <set>
#include <set>
int main ()
{
    std::set<int> v;
    for(int i=0;i<5;i++)
    {
        v.insert(i);
    }
    for(std::set<int>::iterator it1 = v.begin(); it1!=v.end(); ++it1)
    {
        for(std::set<int>::iterator it2=it1+1; it2!=v.end(); ++it2)
        {
        std::cout<<*it1<<" "<<*it2<<std::endl;
        }
    }
    return 0;
}

std::set 的迭代器是双向迭代器,因为内部集合是节点基础结构。对于这种结构,应用带有+偏移量将是 O(N),因此它的迭代器不直接支持这一点。随机访问迭代器支持此操作,其为 O(1)。

"

+"操作仅适用于随机访问迭代器。而且std::set不使用随机访问迭代器

最新更新