我可以在STL :: map :: iterator上进行指针运算

时间:2017-04-08 10:25:59

标签: c++11 iterator

如何正确使用指针算术( exec < /dev/null ; read foo <&2 ; echo $foo )

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

stl::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();,则会引发错误。

问题代表:如何在1 + peoples.begin();上使用指针算术?

是否存在类似困难的容器,而我知道使用stl::map::iterator可以使用指针算术?

1 个答案:

答案 0 :(得分:0)

  

我可以在STL :: map :: iterator

上进行指针运算

没有。你不能在迭代器上做指针算术,因为迭代器(通常)不是指针。

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

通过应用增量运算符n次,您可以找到n迭代器的后继者。这也有标准算法:nextadvance

  

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

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

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