我是一个新的C++学习者,我读了一个关于C++ STL访问向量中最后一个元素的代码块.
为什么第6,7和8行的代码需要减去1以等于第5行的代码?
1. std::vector<int> v;
2. v.push_back(999);
3. //fill up the vector
4. //...
5. int j = v.back();
6. int j = v.[size-1]
7. int j = v.at(v.size()-1)
8. int j = *(v.end()-1)
Run Code Online (Sandbox Code Playgroud)
5. int j = v.back();
Run Code Online (Sandbox Code Playgroud)
std::vector::back被定义为返回向量中的最后一个元素.这是直截了当的.
7. int j = v.[size-1]
Run Code Online (Sandbox Code Playgroud)
指数是基于c ++的0.如果顺序容器具有N个元素,则有效索引包含在0和N-1之间.最后一个元素就是N-1,或者size()-1.
8. int j = *(v.end()-1)
Run Code Online (Sandbox Code Playgroud)
std::vector::end将迭代器返回到容器的一端.之前的元素是向量中的最后一个元素.
这是哪个的说明
v: [ 1 | 2 | 3 | 4 | ... | 999 ]
front() back() end()
begin()
Run Code Online (Sandbox Code Playgroud)
其中front(),分别back()返回第一个和最后一个元素的(const)引用,并end()返回一个迭代器(某种指针),该迭代器指向向量的最后一个元素之外的元素。begin()将迭代器返回到向量的第一个元素。
这些也解释在 std::vector
front访问第一个元素
back访问最后一个元素
end/cend将迭代器返回到结尾
begin/cbegin将迭代器返回到开头
从大小中减去一个是因为C或C ++中的索引从零开始,而不是通常的一个。这意味着,为了访问数组的第一个元素,或者在这种情况下为向量,您说
v[0]
Run Code Online (Sandbox Code Playgroud)
并不是
v[1]
Run Code Online (Sandbox Code Playgroud)
同样,对于最后一个(nth)元素,您不会采用size或n作为数组(向量),而是少一个,例如
v[size() - 1]
Run Code Online (Sandbox Code Playgroud)
要么
v[n - 1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15072 次 |
| 最近记录: |