gpt4 book ai didi

c++ - std::vector::erase() 抛出的异常

转载 作者:行者123 更新时间:2023-11-28 01:48:24 30 4
gpt4 key购买 nike

<分区>

通过 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;
}

v 是程序中预定义的 vector ,n 是它的大小,nl 使用复制构造函数制作该 vector 的拷贝,以免反射(reflect) nl 中对 v 所做的更改。xj 是要删除的索引从 vector 。我还包含了 if 语句以确保不会将无效索引传递给 erase()。但问题是当它在服务器上的外部数据上运行时,我得到了一个段错误。我找不到哪里出错了。

---编辑---我已经用@StoryTeller 的回答替换了负面索引检查。但是当我尝试在 three test cases 上的服务器上运行该程序时,我仍然遇到段错误。 .当我更换时:

nl.erase(nl.begin() + xj);

与,

nl[xj] = -1;

然后稍后检查 -1,然后我没有得到任何段错误但得到 two wrong answers .

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

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com