C++ std::vector::erase()引发的异常

C++ std::vector::erase()引发的异常,c++,exception,vector,C++,Exception,Vector,在浏览std::vector::erase()方法的文档时,它声明该方法不会抛出任何异常,除非传递给它的索引是无效的索引。我的C++程序中有以下的片段: vector<int> remove_element(vector<int> v,int xj,int n) { std::vector<int> nl(v); if (xj < 0) { xj = n + xj; } if(xj>=n)

在浏览std::vector::erase()方法的文档时,它声明该方法不会抛出任何异常,除非传递给它的索引是无效的索引。我的C++程序中有以下的片段:

vector<int> remove_element(vector<int> v,int xj,int n)
{
    std::vector<int> nl(v);

    if (xj < 0)
    {
        xj = n + xj;
    }
    if(xj>=n)
    {
        xj = xj%n;
    }
    nl.erase(nl.begin() + xj);//This line is causing a segmentation fault

   return nl;
}
有,

然后再检查一下-1,这样我就不会得到任何分割错误,而是得到了

我绝对确信我的代码的其他部分是正确的,这就是导致问题的部分

if (xj < 0)
{
   xj = n + xj;
}
还可以使用更简单的表达式(感谢@StoryTeller):

if(xj<0)
{
xj=n+(xj%n);
}
还可以使用更简单的表达式(感谢@StoryTeller):

if(xj<0)
{
xj=n+(xj%n);
}

您需要发布a。如果
xj
小于
-n
,则
xj=n+xj
将保持小于零。我已更新了代码段use vector::size not
n
以消除一个潜在问题。您需要发布a。如果
xj
小于
-n
,则,然后
xj=n+xj
将保持小于零。我已经更新了代码段Use vector::size not
n
以消除一个潜在的问题。如果xj<0和abs(xj)>n这个循环将永远不会终止。@RichardCritten-它将感谢@StoryTeller。如果xj<0和abs(xj)>n这个循环永远不会终止。@RichardCritten-它将感谢,@说书人。
nl[xj] = -1;
if (xj < 0)
{
   xj = n + xj;
}
while (xj < 0)
{
   xj = n + xj;
}
if (xj < 0)
{
   xj = n + (xj % n);
}