【发布时间】:2017-02-01 12:50:23
【问题描述】:
我有两个问题。
第一个问题
我正在阅读来自C++ primer 5th edition 书的C++ 中的迭代器。在本书的一个代码示例中,给出了下面的代码sn-p会在向量vi中找到中间元素
auto mid = vi.begin() + vi.size() / 2;
现在我想问一下,为什么vi.begin()要加在vi.size()里面? vi.size()/2 不足以找到向量vi 中的中间元素吗?
第二个问题
auto mid = vi.begin() + vi.size() / 2;
在这段代码 sn-p 中,如果我在 vi.begin() + vi.size() 周围添加括号,如下所示:
auto mid = (vi.begin() + vi.size()) / 2;
no "/" operator matches these operands... 会抛出错误
为什么会抛出这个错误?我问这个是因为逻辑上应该首先计算这个表达式vi.begin() + vi.size(),然后结果应该除以2。
如果我错了,请纠正我。
【问题讨论】:
-
vi.begin()给出了一个迭代器来开始向量。vi.size()给出元素的计数(整数)。当您将整数添加到迭代器时,迭代器将向前移动那么多元素。在这里,您向前移动元素总数的一半。