vector.back()和vector.end()有什么区别
What is the difference between vector.back() and vector.end()?
我是一个新的C 学习者,我读了一个有关C STL访问Vector的代码块。
为什么第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)
这是其中的例证
v: [ 1 | 2 | 3 | 4 | ... | 999 ]
front() back() end()
begin()
, front()
和 back()
分别返回一个(const(引用第一个和最后一个元素,而 end()
将 iterator (有点像指针(返回到向量的最后一个元素之外的一个。begin()
将迭代器返回到向量的第一个元素。
这些也可以在std::vector
front
访问第一个元素
back
访问最后一个元素
end
/cend
将迭代器返回到结束
begin
/cbegin
将迭代器返回到开始
通常,您开始计数一个。这在C或C 中有所不同,索引成阵列或序列的地方从零开始。这是原因,为什么您必须从大小中减去一个。这意味着,为了访问数组的第一个元素,或者在这种情况下,您会说
v[0]
而不是
v[1]
同样,对于最后一个(nth(元素,您不会服用数组(向量(的size
或n
,而是少一个,例如,例如。
v[size() - 1]
或
v[n - 1]
5. int j = v.back();
std::vector::back
被定义为返回向量中的最后一个元素。这很简单。
7. int j = v.[size-1]
索引为0基于C 。如果顺序容器具有N元素,则有效索引包含在0和N-1之间。最后一个元素是N-1或size()-1
。
8. int j = *(v.end()-1)
std::vector::end
将迭代器返回到容器的一正末端。之前的元素是向量中的最后一个元素。
回答您的标题问题:
函数调用begin((,end((将返回迭代器位置。Back((只需返回向量中的最后一个元素。通常使用以这种方式使用begin((和end((。
vector<int>::iterator i = someVector.begin(); //or someVector.end();
while(i != someVector.end()){
//do something;
i++;
} //this will loop through all elements in the vector;
正如其他人提到的,.end((是最后一个元素之后的1位。距离取决于数据结构实现和数据类型。就您而言,您甚至可以将迭代器视为指向int的指针。(但是它们不是!!!(因此,如果您退出它将为您带来价值。实际上,`
someVector.back();
与
相同*(someVector.end()-1);
回答您的内容问题:我们从0开始计数如 @franks101所述。
vector.end(( - 返回迭代器,涉及向量容器中的过去元素。vector.back(( - 返回对向量中的最后一个元素的引用。
来自cplusplus:
back((返回对向量中的最后一个元素的引用。
与成员vector ::结束不同 元素,此功能返回直接参考。
在空容器上调用此功能会导致不确定的行为。
std::vector::end()
是迭代器之外的一个,它包含std::vector::back()
。
back((只是返回对最后一个元素的引用。而 end((将指针或迭代器返回到最后一个元素。另外, end((可以使用 begin((。
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 当我从 std::vector 中的新放置调用析构函数时会发生什么?
- 向后迭代 std::array 或 std::vector 的正确方法是什么?
- 这句话是什么意思 - " vector<long long> distance(n, std::numeric_limits<long long>::max()); "?
- 最接近"std::atomic<std::vector>"是什么?
- 行 - " vector<int> used(adj.size(), 0); "是什么意思?
- 将vector<vector<double>>从x86平台中创建的一个进程发送到x64中构建的另一个进程的最快方法是什么
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 代码中的"vector<<int>vector>&index"是什么意思?
- 释放 std::vector 中指针内存的最有效方法是什么?
- 当我们push_back元素时,std::vector 什么时候会放大自己?
- 如果我将"reference to vector"分配给"vector"会发生什么情况
- vector.back()和vector.end()有什么区别
- 这个(const vector<vector<int> > &A)"代码段是什么意思?
- 什么是vector<int,int>它甚至有效吗?
- std::shared_ptr<std::vector有什么问题<double>>
- 带有 std::vector 和 std::queue 的 Prim's 算法,我的代码有什么问题?
- std::vector<int> 和 std::vector* 有什么区别<int>?