while(!v1.empty() || !v2.empty())
{
int k=0;
if(v1[k] < v2[k])
v1.erase(v1.begin());
else
v2.erase(v2.begin());
cout<<v1[0];
}
这是我的代码 在这里我想删除元素,直到其中一个为空(向量排序), 喜欢如果
v1包含2,3,5,8
v2包含3,4,7
然后据我说,它应该给我8
,但它给予segmentation fault
答案 0 :(得分:5)
使用&amp;&amp;而不是||:
while( !v1.empty() && !v2.empty())
如果没有它,当其中一个向量为空时,你进入while循环,然后尝试访问不存在的元素。
答案 1 :(得分:2)
使用&&
:
while( !v1.empty() && !v2.empty())
{
...
}
第二个问题是您在v1[0]
之后使用erase
。如果erase
删除了向量v1
的最后一个元素,则v1[0]
会导致未定义的行为。
if(v1[0] < v2[0])
v1.erase(v1.begin());
else
v2.erase(v2.begin());
cout << v1[0];
答案 2 :(得分:2)
while(!v1.empty() && !v2.empty())
{
int k=0;
if(v1[k] < v2[k])
v1.erase(v1.begin());
else
v2.erase(v2.begin());
}
if (!v1.empty()) {
cout << v1[0];
} else if (!v2.empty()) {
cout << v2[0];
}
答案 3 :(得分:0)
以下条件:
if(v1[k] < v2[k])
如果vector
已经为空,则此条件不会检查。如果其中一个vector
被清空,那么您正在访问禁止的位置(v1[0]
或v2[0]
)。所以你的情况应该是:
while(!(v1.empty() || v2.empty()))