Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vector.back()和vector.end()之间有什么区别? 我是一个新的C++学习者,我读了一个关于C++的STL代码块,它从一个向量中访问最后一个元素。_C++_Vector - Fatal编程技术网

vector.back()和vector.end()之间有什么区别? 我是一个新的C++学习者,我读了一个关于C++的STL代码块,它从一个向量中访问最后一个元素。

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、

为什么第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、 推回(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);