**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
Improve this question
我正在做一个算法问题,“将元素移到末尾”,我得到一个元素数组,一个目标值,我需要将所有与这个目标值相同的值移到数组的末尾,
#include <vector>
using namespace std;
vector<int> moveElementToEnd(vector<int> array, const int toMove) {
// Write your code here.
auto left = array.begin();
auto right = array.end() -1;
while(left < right){
if (left == right) {
break;
}
if (left >= array.end()) {
break;
}
if (right < array.begin()) {
break;
}
if(*right == toMove){
--right;
}
if(*right != toMove && *left == toMove){
iter_swap(right, left);
--right;
}
if(*right != toMove && *left!=toMove){
++left;
}
}
// bug here
// cout << "left: " << *left << "right: "<< *right << endl;
return array;
}
如果我取消对该行的注解,那么在这个while循环中不会发生分段
cout << "left: " << *left << "right: "<< *right << endl;
分割错误抛出,但如果我不这样做,一切正常工作,这真的很奇怪,因为左右永远不会移出边界,我检查了输出,
我以前也试过别的方法
vector<int> moveElementToEnd(vector<int> array, const int toMove) {
// Write your code here.
auto left = array.begin();
auto right = array.end() -1;
while(left < right){
// if (left == right) {
// break;
// }
// if (left >= array.end()) {
// break;
// }
// if (right < array.begin()) {
// break;
// }
if(*right == toMove){
--right;
}
if(*right != toMove && *left == toMove){
iter_swap(right, left);
--right;
}
if(*right != toMove && *left!=toMove){
++left;
}
}
// seg fault occurs here
return array;
}
这是我的原始版本,因为左右永远不会超出范围,这是我正在尝试的数据[2,1,2,2,2,3,4,2]
并且分段故障正好发生在返回之前
1条答案
按热度按时间j2datikz1#
这里
退出循环时,左边离开数组末尾,然后遵从它