2017-04-08 50 views
0

如何正确使用stl::map::iterator的指针运算?我可以在STL :: map :: iterator上做指针运算

在下面的示例中,我创建了stl::mapstl::map::iterator并尝试通过增加迭代器来访问迭代器第二个键。

#include <iostream> 
#include <map> 

using namespace std; 

int main() { 

    map <string, string> peoples; 

    peoples["paul"] = "friend"; 
    peoples["galactus"] = "foe"; 

    map<string, string>::iterator my_iter = ++peoples.begin(); 

    cout << my_iter->first << endl; 

    return 0; 
} 

当使用++peoples.begin();编译是OK,但如果使用1 + peoples.begin();,出现错误。

问题站:如何使用指针算术stl::map::iterator

是否有任何容器有类似的困难,虽然我知道用stl::vector::iterator你可以使用指针算术?

回答

0

我可以做一个指针STL ::地图上算术:迭代

号你不能这么做指针算术上的迭代器,因为迭代器是(一般)不是指针。

如果你看看文档,你会发现map::iterator是一个双向迭代器。您还会发现双向迭代器不支持添加运算符。

您可以通过应用递增运算符n次找到n迭代器的第th个继承者。这里也有标准算法:nextadvance

我知道用stl::vector::iterator你可以使用指针算术?

vector::iterator是一个随机访问迭代器。那些支持添加运算符。


PS。原始STL不在名称空间中,标准库位于命名空间std中;不是stl

+0

那么cpp如何将stl :: map :: iterator的++转换为++? ,它是最后添加的数字,不是吗? –

+0

@Café吸血鬼什么号码加到底是什么? – user2079303

+0

不,这是误会。我问的是'++'是如何最终(在编译过程结束时)在cpp中翻译的。我所建议的是,'++'必须产生一个增加迭代器值的数字。 –