如何正确使用指针算术( exec < /dev/null ; read foo <&2 ; echo $foo )
?
在下面的示例中,我创建stl::map::iterator
和stl::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
可以使用指针算术?
答案 0 :(得分:0)
我可以在STL :: map :: iterator
上进行指针运算
没有。你不能在迭代器上做指针算术,因为迭代器(通常)不是指针。
如果您查看文档,您会发现map::iterator
是双向迭代器。您还会发现双向迭代器不支持加法运算符。
通过应用增量运算符n
次,您可以找到n
迭代器的后继者。这也有标准算法:next
和advance
。
我知道使用
stl::vector::iterator
你可以使用指针算术吗?
vector::iterator
是一个随机访问迭代器。那些支持加法运算符。
PS。原始STL不在命名空间中,标准库位于命名空间std
中;不是stl
。