迭代器的算术操作问题

wushuai1346 2009-02-22 01:50:56
昨天在书上看到的代码,说是可以直接定位于vector的中间变量:
vector<int>::iterator mid = vi.begin() + vi.size()/2;
但是我不知道这段代码是如何实现这个功能的,希望有大侠可以帮我具体解释一下,
另外,这段代码和:
vector<int>::iterator mid = (vi.begin() + vi.size())/2;
的区别是什么呢?谢谢先.
...全文
150 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wushuai1346 2009-02-22
  • 打赏
  • 举报
回复
明白,谢大家了.
  • 打赏
  • 举报
回复
迭代器mid 基本可以认为类似指针.
vector <int>::iterator mid = vi.begin() + vi.size()/2;
就是从vi的起始+半个vi的size,那肯定是指向vi的中间位置啊.
这么明显的代码还需要解释?
pengzhixi 2009-02-22
  • 打赏
  • 举报
回复
int a[9];
int *p=a;
cout<<*p<<" "<<*(p+5)<<endl;//分别输出第一个元素和第6个元素。
pengzhixi 2009-02-22
  • 打赏
  • 举报
回复
int a[9];
int *p=a;
cout<<*p<<" "<<*(p+5)<<endl;//分别输出第一个元素和第6个元素。
wushuai1346 2009-02-22
  • 打赏
  • 举报
回复
自己顶,希望有人回答3楼的问题,谢谢先
wuyanchao 2009-02-22
  • 打赏
  • 举报
回复
很明显lz看的是c++primer



稍微仔细想一下就ok了
tangshuiling 2009-02-22
  • 打赏
  • 举报
回复

如果不出意料,(vi.begin() + vi.size())/2 崩溃!~~!
wushuai1346 2009-02-22
  • 打赏
  • 举报
回复
也就是相当于vi.begin() + (vi.size()/2)对吧?vi.size()/2是距离,但是距离是偶数怎么办呢?也就是如果有6个元素,该会怎样处理呢?
机智的呆呆 2009-02-22
  • 打赏
  • 举报
回复
vector <int>::iterator mid = (vi.begin() + vi.size())/2;应该是错误的,迭代器没有重载 / 运算符
waizqfor 2009-02-22
  • 打赏
  • 举报
回复
vector <int>::iterator mid = (vi.begin() + vi.size())/2;
vector <int>::iterator mid = vi.begin() + vi.size()/2;
这两个代码的在最后的vi.begin() + vi.size()/2;和(vi.begin() + vi.size())/2; 的结合性不一样啊
vi.begin() + vi.size()/2;这是定义起始位置 然后+上长度的一半vi.size()/2 所以得到的就是中间变量
(vi.begin() + vi.size())/2而这个 要先计算起始+长度 然后再取中值

65,210

社区成员

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

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