Nic*_*ick 6 c++ iterator vector
我有两个问题.
第一个问题
我读关于迭代器在C++从C++ primer 5th edition书.在本书的一个代码示例中,给出了以下代码片段将在向量中找到中间元素vi
auto mid = vi.begin() + vi.size() / 2;
Run Code Online (Sandbox Code Playgroud)
现在我想问一下,为什么vi.begin()加入vi.size()?会不会vi.size()/2有足够找到矢量中间元素vi?
第二个问题
auto mid = vi.begin() + vi.size() / 2;
Run Code Online (Sandbox Code Playgroud)
在此代码段中,如果我vi.begin() + vi.size()像这样添加括号:
auto mid = (vi.begin() + vi.size()) / 2;
Run Code Online (Sandbox Code Playgroud)
它抛出错误 no "/" operator matches these operands...
为什么会抛出这个错误?我问这个是因为逻辑上这个表达式vi.begin() + vi.size()应该首先计算,结果应该除以2.
如果我错了,请纠正我.
表达式vi.begin() + vi.size()导致迭代器增加了vi.size()一倍,并且迭代器没有operator/.
第一个代码片段的工作原理是首先计算C++强制规则的运算符优先级规则vi.size() / 2,然后添加此结果(整数),vi.begin()从而将迭代器递增指定的量.
也就是说,潜在的误解vi.begin() + vi.size() / 2是不等于(vi.begin() + vi.size()) / 2,而是vi.begin() + (vi.size() / 2).
| 归档时间: |
|
| 查看次数: |
6330 次 |
| 最近记录: |