C++ std::vector::erase()引发的异常
在浏览std::vector::erase()方法的文档时,它声明该方法不会抛出任何异常,除非传递给它的索引是无效的索引。我的C++程序中有以下的片段: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)
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 notn
以消除一个潜在问题。您需要发布a。如果xj
小于-n
,则,然后xj=n+xj
将保持小于零。我已经更新了代码段Use vector::size notn
以消除一个潜在的问题。如果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);
}