秒贴 random access iterator

iamnobody 2011-10-10 05:00:04
请问 random_access_iterator 这个类型的迭代器有什么要求?主要关心的是是否要求内存连续。因为我怕我为我的容器定义了某个random access iterator后,他的copy之类的操作会被优化成memmove();(见过这种现象)但是我的迭代器虽然是可以支持+=。但是内存只是有序,但是不连续。这样会出错的。

期待标准党的复制粘贴。
...全文
150 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
景荣1 2011-10-10
  • 打赏
  • 举报
回复
POD = 朴素的数据类型
taodm 2011-10-10
  • 打赏
  • 举报
回复
csdn里就有下载。
iamnobody 2011-10-10
  • 打赏
  • 举报
回复
求标准,,,还是标准没有?
标准在哪里下载?
iamnobody 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 qq120848369 的回复:]
 在C++中,我们把传统的C风格的struct叫做POD(Plain Old Data)对象。一般来说,POD对象应该满足如下特性。   对于POD类型T的对象,不管这个对象是否拥有类型T的有效值,如果将该对象的底层字节序列复制到一个字符数组(或者无符号字符数组)中,再将其复制回对象,那么该对象的值与原始值一样。考试就到   对于任意的POD类型T,如果两个T指针分别指向两个不同的对象obj1和o……
[/Quote]

还是不知道导致memmove的原因,我还是再看看copy的实现吧。。
qq120848369 2011-10-10
  • 打赏
  • 举报
回复
 在C++中,我们把传统的C风格的struct叫做POD(Plain Old Data)对象。一般来说,POD对象应该满足如下特性。   对于POD类型T的对象,不管这个对象是否拥有类型T的有效值,如果将该对象的底层字节序列复制到一个字符数组(或者无符号字符数组)中,再将其复制回对象,那么该对象的值与原始值一样。考试就到   对于任意的POD类型T,如果两个T指针分别指向两个不同的对象obj1和obj2,如果用memcpy库函数把obj1的值复制到obj2,那么obj2将拥有与obj1相同的值。   简言之,针对POD对象,其二进制内容是可以随便复制的,在任何地方,只要其二进制内容在,就能还原出正确无误的POD对象。对于任何POD对象,都可以使用memset()函数或者其他类似的内存初始化函数。
pengzhixi 2011-10-10
  • 打赏
  • 举报
回复
POD就是由 int,float等基本类型以及基本类型的指针和基本类型组成的 struct ,union都属于POD
qq120848369 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 mingliang1212 的回复:]
引用 8 楼 qq120848369 的回复:
引用 7 楼 mingliang1212 的回复:
已经知道不要求连续了,因为deque就是不连续的random access iterator //
但是还是期待标准党的更多要求


random iterator 还是人为规定的东西,它认为deque应该表现得像数组一样,所以把迭代器的类型规定成random. 就像list的迭代器一样……
[/Quote]

对,容器的迭代器划到哪一种类型是人定的,绝对不是导致memmove的原因额,要淡定.
iamnobody 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qq120848369 的回复:]
引用 7 楼 mingliang1212 的回复:
已经知道不要求连续了,因为deque就是不连续的random access iterator //
但是还是期待标准党的更多要求


random iterator 还是人为规定的东西,它认为deque应该表现得像数组一样,所以把迭代器的类型规定成random. 就像list的迭代器一样,我规定它是random iterator 也一样……
[/Quote]

POD是什么?

另外,根据《范型编程与STL》的说法。random access iterator 要求+=,-=,<,>操作都是0(1);
iamnobody 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pengzhixi 的回复:]
看标准文档547和548页 两页的要求就是了。
[/Quote]

不知道在哪里找标准的说。。。
pengzhixi 2011-10-10
  • 打赏
  • 举报
回复
看标准文档547和548页 两页的要求就是了。
qq120848369 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mingliang1212 的回复:]
已经知道不要求连续了,因为deque就是不连续的random access iterator //
但是还是期待标准党的更多要求
[/Quote]

random iterator 还是人为规定的东西,它认为deque应该表现得像数组一样,所以把迭代器的类型规定成random. 就像list的迭代器一样,我规定它是random iterator 也一样能实现+n的操作,只不过开发STL的人觉得不合适而已.

对象的复制能否memmove与这个迭代器可以说是关系不大的,必须要看对象类型是否POD~
iamnobody 2011-10-10
  • 打赏
  • 举报
回复
已经知道不要求连续了,因为deque就是不连续的random access iterator //
但是还是期待标准党的更多要求
qq120848369 2011-10-10
  • 打赏
  • 举报
回复
还有,copy行为直接调用memmove的前提可不是random_iterator的原因,是POD+random_iterator的原因.
qq120848369 2011-10-10
  • 打赏
  • 举报
回复
还是连续内存才行哦。
shenyan008 2011-10-10
  • 打赏
  • 举报
回复
同期待。
only_lonely 2011-10-10
  • 打赏
  • 举报
回复
同期待标准党的复制粘贴。
Qlaiaqu 2011-10-10
  • 打赏
  • 举报
回复
random_access_iterator
它的特点就是可以像数组[]一样访问,而其它类型的迭代器则不行
昵称很不好取 2011-10-10
  • 打赏
  • 举报
回复
random_access_iterator,随机访问,应该需要连续内存的

64,645

社区成员

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

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