Abh*_*yal 2 c++ iterator stl vector
为什么 using 会vector.erase(vector.end())产生
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
使用此代码时:
#include <iostream>
#include <vector>
using namespace std;
void printMe(vector<int>& v){ for(auto &i:v) cout<<i<<" "; cout<<"\n"; }
int main() {
vector<int> c = { 1,2,3,4,5,6,7,8};
printMe(c);
c.erase(c.begin());
printMe(c);
c.erase(c.begin());
printMe(c);
// c.erase(c.end()); //will produce segmentation fault
// printMe(c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我对这些迭代器有点陌生,所以这让我措手不及。虽然我知道存在vector.pop_back()。我很想知道到底是什么原因造成的。
程序的链接。
vector::end()不指向最后一个元素,它指向最后一个元素之后的元素。
std::vector::end返回引用向量容器中末尾元素的迭代器。
尾后元素是向量中最后一个元素之后的理论元素。它不指向任何元素,因此不应取消引用。
由于标准库函数使用的范围不包括其闭迭代器所指向的元素,因此该函数通常与 结合使用来
vector::begin指定包括容器中所有元素的范围。
因此,它没有任何内容erase(),因此会出现错误。
代替
c.erase(c.end());
Run Code Online (Sandbox Code Playgroud)
和
c.erase(c.end() - 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1800 次 |
| 最近记录: |