vector.back()和vector.end()之间有什么区别? 我是一个新的C++学习者,我读了一个关于C++的STL代码块,它从一个向量中访问最后一个元素。
为什么第6、7和8行的代码需要减去1才能等于第5行的代码vector.back()和vector.end()之间有什么区别? 我是一个新的C++学习者,我读了一个关于C++的STL代码块,它从一个向量中访问最后一个元素。,c++,vector,C++,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) 1。std::向量v; 2.v、
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)
1。std::向量v;
2.v、 推回(999);
3. //填充向量
4. //...
5.int j=v.back();
6.int j=v[尺寸-1]
7.int j=v.at(v.size()-1)
8.int j=*(v.end()-1)
来自:
back()返回对向量中最后一个元素的引用
与member vector::end不同,后者返回的迭代器刚刚超过
元素,此函数返回直接引用
对空容器调用此函数会导致未定义的行为
end()-返回一个迭代器,该迭代器引用向量容器中结束元素的过去部分。
vector.back()-返回对向量中最后一个元素的引用。std::vector::end()
是包含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)
将迭代器返回到容器末尾的迭代器。前面的元素是向量中的最后一个元素。要回答标题问题: 函数调用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;
与
*(someVector.end()-1);
要回答您的内容问题,请执行以下操作:
正如@FrankS101所述,我们从0开始计数。下面是哪个是哪个的例子
v:[1 | 2 | 3 | 4 |……| 999]
back()只返回对最后一个元素的引用。而end()返回指向最后一个元素的指针或迭代器。另外,end()可用于检查当使用begin()从头开始执行迭代时的停止条件。成员函数end返回“指向”的迭代器在向量的最后一个元素之后。当你有这样的问题时,可以通过查阅cplusplus来轻松回答。这是一个糟糕的参考,它并不总是准确的。请选择,但有更好的例子。你到底发现了什么?是的,我;即使我不得不这么做,我也没有准确地使用“穷人”这个词。@MarekVitek我这里指的是你:cplusplus和cppreference有不同的目标受众。cplusplus.com以准确度换取较低的进入门槛。很适合快速阅读,但如果您真的需要了解详细信息,请查看其他地方。@user4581301刚刚看到std::move on cppreference.com上的最后一次编辑,让我觉得,它们没有什么不同。只是没有人需要在上面写这件事。如果我真的想了解可靠的信息,那么我将转向标准本身。对于初学者来说,cplusplus.com很好。如果你发现了一个错误,你可以纠正它。
someVector.back();
*(someVector.end()-1);