C++ - 向量中的分割错误


#include <cmath>
#include <cstdio>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int main() 
{
int a, b;
cin>>a;
vector<int> numbers;
for(int i=0; i<a; i++)
{
cin>>b;
numbers.push_back(b);
}
int c,d,e;
cin>>c;
numbers.erase(numbers.begin()+c-1);
cin>>d>>e;
numbers.erase(numbers.begin()+d-1, numbers.end()+e);
cout<<numbers.size();
for(int x : numbers)
cout<<x<<" ";
return 0;
}

大家好, 我正在学习c ++并编写一个非常简单的程序,但是此代码将"分段错误"作为错误给出。我真的想不通为什么会这样。

谢谢。

此行

numbers.erase(numbers.begin()+d-1, numbers.end()+e);

不能正确。递增end迭代器永远不会获得有效的迭代器。目前还不清楚您要做什么,但是如果您想擦除索引范围内的元素[d,e)那么这将是

numbers.erase(numbers.begin()+d, numbers.begin()+e);

注意:第一个不需要+1,因为第一个是包含的。通过递增begin迭代器而不是end迭代器,您可以获得第e个元素的迭代器(嗯......我假设常见的基于 0 的计数,即"第一个"元素是第 0 个元素;)。

此外,如注释中所述,在调用erase之前,您应该检查用户输入的值是否在范围内。erase不进行边界检查。如果传递无效的迭代器,则会得到未定义的行为。

相关内容

  • 没有找到相关文章

最新更新