gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:16:11 24 4
gpt4 key购买 nike

这很好用,但看起来很丑

#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::iterator 没有 + 运算符,这是为什么呢?有解决这个问题的优雅方法吗?

#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 的迭代器是 bidirectional iterators ,因为内部集合是基于节点的结构。对于这种结构,使用 + 应用偏移量将是 O(N),因此它的迭代器不直接支持它。随机访问迭代器支持此操作,其复杂度为 O(1)。

关于c++ - 集合迭代器的加号运算符不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27132831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com