C++11 我可以在STL::map::迭代器上执行指针算法吗
如何正确使用C++11 我可以在STL::map::迭代器上执行指针算法吗,c++11,iterator,C++11,Iterator,如何正确使用stl::map::iterator的指针算法 在下面的示例中,我创建了stl::map和stl::map::iterator,并尝试通过增加迭代器来访问迭代器的第二个键 #include <iostream> #include <map> using namespace std; int main() { map <string, string> peoples; peoples["paul"] = "friend";
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;
}
#包括
#包括
使用名称空间std;
int main(){
地图民族;
人民[“保罗”]=“朋友”;
人民[“银河”]=“敌人”;
迭代器my_iter=++peoples.begin();
先走
我可以在STL::map::迭代器上执行指针算法吗
不可以。您不能在迭代器上执行指针算术,因为迭代器(通常)不是指针
如果您查看文档,您会发现map::iterator
是一个双向迭代器。您还会发现双向迭代器不支持加法运算符
通过应用递增运算符n
次,可以找到迭代器的n
次后继者。这方面也有标准算法:next
和advance
我知道通过stl::vector::iterator
可以使用指针算法
vector::iterator
是一个随机访问迭代器。这些迭代器支持加法运算符
另外,原始STL不在名称空间中,标准库位于名称空间std
;而不是STL
我可以在STL::map::迭代器上执行指针算法吗
不可以。您不能在迭代器上执行指针算术,因为迭代器(通常)不是指针
如果您查看文档,您会发现map::iterator
是一个双向迭代器。您还会发现双向迭代器不支持加法运算符
通过应用递增运算符n
次,可以找到迭代器的n
次后继者。这方面也有标准算法:next
和advance
我知道通过stl::vector::iterator
可以使用指针算法
vector::iterator
是一个随机访问迭代器。这些迭代器支持加法运算符
另外,原始STL不在名称空间中,标准库在名称空间中std
;而不是STL
,所以cpp如何将这个++翻译成STL::map::iterator?是数字加在了最后,不是吗?@Cafévamper什么后面加了什么数字?不,这是误解。我问“++”是什么意思最后(在编译过程结束时)在cpp内部翻译。我的建议是,“++”必须产生一个增加迭代器值的数字。@CaféVamper我明白了。为什么你认为++必须产生一个数字?@CaféVamper:迭代器可能是一个封装指向数据结构的指针的类。迭代器上的++
操作符将使用数据找到要更改指针的对象。不涉及数字。那么cpp如何将这个++转换为stl::map::iterator?最后添加的是数字,不是吗?@CaféVamper在什么的末尾添加了什么数字?不,这是误解。我问的是“++”最终是如何(在编译过程结束时)的在cpp内部翻译。我的建议是,“++”必须产生一个增加迭代器值的数字。@CaféVamper我明白了。为什么你认为++必须产生一个数字?@CaféVamper:迭代器可能是一个封装指向数据结构的指针的类。迭代器上的++
操作符将使用数据重新构造以找到要更改指针的对象。不涉及数字。