Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 我可以在STL::map::迭代器上执行指针算法吗_C++11_Iterator - Fatal编程技术网

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:迭代器可能是一个封装指向数据结构的指针的类。迭代器上的
++
操作符将使用数据重新构造以找到要更改指针的对象。不涉及数字。