[C++] 为什么程序总是跳转到vector头文件中,然后终止呢
如下代码实现mergesort,\
- C/C++ code
#include <iostream>#include <vector>using namespace std;void merge (vector<int> &arr, int first , int mid, int last, vector<int> &crr){ int f = first; int m = mid + 1; int t = 0; while (f <= mid && m <= last) { if (arr[f] < arr[m]) crr[t++] = arr[f++]; else crr[t++] = arr[m++]; } while (f <= mid) crr[t++] = arr[f++]; while (m <= last) crr[t++] = arr[m++]; for (int i = 0; i < t; ++i) arr[first + i] = crr[i];}void mergeSort (vector<int> &arr, int first, int last, vector<int> &crr){ int mid = (first + last) / 2; while (first < mid) { mergeSort (arr, first, mid, crr); mergeSort (arr, mid + 1, last, crr); merge (arr, first, mid, last, crr); }}void mergeSort (vector<int> &arr){ vector<int> crr (arr.size()); mergeSort (arr, 0, arr.size() - 1, crr);}int main (){ int a[] = { 1, 10, 20, 30, 50, 2, 88, 4, 60, 100 }; vector<int> arr (a, a + 10); mergeSort (arr); for (vector<int>::iterator iter = arr.begin(); iter != arr.end(); ++iter) cout << *iter << '\t';gdb单步跟踪到调用 mergeSort (arr, 0, arr.size() - 1, crr);
输出如下内容
(gdb) s
std::vector<int, std::allocator<int> >::size (this=0x7fffffffe0d0)
at /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/stl_vector.h:533
533 { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
然后程序就pause了, ...
[解决办法]
你的mergeSort函数里那个while死循环了~