stl新版本指针转iterator

Xcoder 2006-12-18 05:42:51
以前有这样的代码:
vector<int> array;
vector<int>::iterator it;

it = NULL;
it = &array.back();

vc6下编得过的,运行也没问题。vc2005编译报错了。我想知道c++标准对这个问题是怎么说的,random_access_iterator 可以从指针转换么?这个代码应该怎么改最好?thanks!

...全文
188 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
roydux 2006-12-18
  • 打赏
  • 举报
回复
vector<int> array;
vector<int>::iterator it = array.end() - 1 ;
a_b_c_abc8 2006-12-18
  • 打赏
  • 举报
回复
array.back();//这个是返回最后一个元素

vector<int>::iterator it = --(array.end());//要返回最后一个元素的迭代器可这样写
jixingzhong 2006-12-18
  • 打赏
  • 举报
回复
vector<int>::iterator it = array.back();

迭代器 的作用和指针类似,
但是在 概念上,
它们可是有很大的区别的 ...

就理解成一个 容器的索引就好了 ~~
healer_kx 2006-12-18
  • 打赏
  • 举报
回复
迭代器并不是指针,所以别写出这样的代码就行了

it = NULL;

对于vecotr的实现来说,
VC6的STL好像是用原始指针实现的,所以这样"写"可以"编译"。
但是对于某些版本的STL的迭代器使用结构体聚合指针来实现的。所以这样的代码就不能编译了。
但是不管怎么实现,这么用iterator都是不对的。
guochun 2006-12-18
  • 打赏
  • 举报
回复
c++中的iterator不一定是指针,最好不要直接赋值地址
c++标准中只规定iterator的操作,算法
至于是否是指针不同编译器,不同容器都不同
  • 打赏
  • 举报
回复
这样写可以吧。
vector<int>::iterator it = array.back();

一份讲解全面的标准模板库STL学习资料 标准模板库STL主要由6大组件组成: (1)容器(Containers)。包括各种基本数据结构的类模板。 STL容器部分主要由头文件、< map>、组成。 (2)算法(Algorithms)。包括各种基本算法,如比较、交换、查找、排序、遍历操作、复制、修改、移除、反、合并等等。 STL算法部分主要由头文件组成。 (3)迭代器(Iterators)。迭代器是面向对象版本的指针,如同指针可以指向内存中的一个地址,迭代器可以指向容器中的一个位置。 STL的每一个容器类模板中,都定义了一组对应的迭代器类,用以存取容器中的元素。这样,在STL中迭代器就将算法和容器联系起来了,通过迭代器,算法函数可以访问容器中指定位置的元素,而无需关心元素的具体类型。 STL迭代器部分主要由头文件和<iterator>组成。 (4)函数对象(Function Objects)。一种行为类似于函数的class,实现技术上是一个改写了“call operator()”的class。 STL 提供 15 个预定义的 Function objects。头文件中定义了一些类模板,用以声明函数对象。 (5)适配器(Adaptors)。简单地说就是一种接口类,专门用来修改现有类的接口,提供一种新的接口;或调用现有的函数来实现所需要的功能。 主要包括3种适配器Container Adaptors、Iterator Adaptors与Function Adaptors。其中迭代器适配器的定义在头文件<iterator>中,函数适配器的定义在头文件中。 (6)内存配置器(Allocators)。为STL提供空间配置的系统。 头文件中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。容器使用allocator完成对内存的操作,allocator提供内存原语以对内存进行统一的存取。

65,186

社区成员

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

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