【发布时间】:2016-09-10 23:17:28
【问题描述】:
我正在尝试实现归并排序算法。首先,我正在尝试创建合并方法。我正在使用向量并利用迭代器。但是merge 函数中的while 主体会导致此错误:
“./a.out”被信号 SIGSEGV 终止(地址边界错误)
这是代码
#include <iostream>
#include <vector>
std::vector<int> merge(std::vector<int> &, std::vector<int> &);
int main()
{
std::vector<int> vect {1,3,5,7};
std::vector<int> vect2 {2,3,6,8};
std::vector<int> temp_vect = merge(vect, vect2);
for(int num: temp_vect) {
std::cout << num << std::endl;
}
}
std::vector<int> merge(std::vector<int> & first_vect, std::vector<int> & second_vect)
{
std::vector<int> sorted_vect;
auto sorted_it = sorted_vect.begin();
auto first_it = first_vect.begin(), second_it = second_vect.begin();
while(first_it != first_vect.end() || second_it != second_vect.end()) {
if(*first_it < *second_it) {
sorted_vect.push_back(*first_it);
first_it++;
} else if(*first_it > *second_it) {
sorted_vect.push_back(*second_it);
second_it++;
} else {
sorted_vect.push_back(*first_it);
sorted_vect.push_back(*second_it);
first_it++; second_it++;
}
}
if(first_it == first_vect.end()) {
//end of first_vect reached
//inserting the rest of second_vect
sorted_vect.insert(sorted_vect.end() - 1, second_it, second_vect.end());
} else if (second_it == second_vect.end()) {
//end of second_vect reached
//inserting the rest of first_vect
sorted_vect.insert(sorted_vect.end() - 1, first_it, first_vect.end());
}
return sorted_vect;
}
【问题讨论】:
-
如果
first_it != end和second_it == end,你的while循环会发生什么? -
@PaulMcKenzie
sorted_vect与被迭代的向量不同。 -
@RichardCritten 好的,我现在看到了。
标签: c++ c++11 iterator mergesort segmentation-fault