求解关于c++的map的迭代器的问题。。。

Draven_Liu 2014-09-01 05:32:28
1:迭代器的实际类型到底是什么呢?我知道定义的时候是map<int,string>::iterator iter 那么iterator 总归是有个最原始的类型吧?结构体?整数?指针。。。。?
2:比如我现在使用find查找, iter=map<int,string>.find(3) 那么查找到的iter到底是什么样子的? 我怎么打印出来当前通过3这个键值找到的那个字符串呢? 为什么我看到代码里面用的是 value = iter->second ?? 怎么是second啊? 什么意思啊这到底是、、、、


小白跪求啊、、、、、、、、、、、、、大神求救
...全文
580 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
神奕 2014-09-02
  • 打赏
  • 举报
回复
迭代器是一个封装的类,但你可以把它当指针一样看待。。。
mujiok2003 2014-09-02
  • 打赏
  • 举报
回复
map<int,string>.::value_type是std::pair< const in, string>, 而pair是模板类, 有成员first, second。
mujiok2003 2014-09-02
  • 打赏
  • 举报
回复
引用
1:迭代器的实际类型到底是什么呢?我知道定义的时候是map<int,string>::iterator iter 那么iterator 总归是有个最原始的类型吧?结构体?整数?指针。。。。?
map<int,string>::iterator 是内嵌类型(一般是typedef), 这是一种抽象机制, 具体是啥可以变化。 你不该关心具体类型。
勤奋的小游侠 2014-09-02
  • 打赏
  • 举报
回复
1迭代器是一个类,一个模版类。它的内部有一个原始指针,它本身重载了*,->等种种操作符,所以使它表现得和指针一样。 2map<int,string> 它的迭代器是有二个成员的,第一个是first,就是int类型,第二个是second,是string类型。 不同的容器的迭代器的实现是不同的。迭代器是一群类的泛称,只要遵守stl的标准就可以通用。你要看一下stl的源码就清楚了。
jwj070524 2014-09-01
  • 打赏
  • 举报
回复
迭代器可以当做一种特殊的指针,对于不同的数据结构,虽然它们的实现不一样,但是却提供了一种统一的使用接口。看例子,不同的数据结构,但是三个的输出是一模一样的。Iterator可以帮助开发者按某种规则顺序访问容器中的所有元素。

#include <iostream>
#include <vector>
#include <list>

template <class _Iter>
void Display(_Iter begin, _Iter end)
{
  while (begin != end)
    std::cout << *begin++ << ' ';
  std::cout << std::endl;
}

#define ARRAY_LEN(X) (sizeof(X)/sizeof(X[0]))

int main ()
{
  int arr[] = {1, 2, 3, 4, 5};
  std::vector<int> intVector(arr, arr+ARRAY_LEN(arr));
  std::list  <int> intList  (arr, arr+ARRAY_LEN(arr));

  Display(arr, arr+ARRAY_LEN(arr));
  Display(intVector.begin(), intVector.end());
  Display(intList.begin(), intList.end());

  return 0;
}
Falleyes 2014-09-01
  • 打赏
  • 举报
回复
1、类 2、返回的是一个迭代器,这个迭代器指向类型是pair<int,string>。map<int,string>相当于多个pair<int,string>组合起来。 当你使用 iter=map<int,string>.find(3),这时iter已经指向了第一个值为3的pair,iter->first指的是pair中的int,iter->second指的是pair中的string

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧