问题描述
template<typename Iter>
void Q_sort(Iter left,Iter right) {
auto separator = *(left + (left - right) / 2);
auto t_left = left,t_right = right;
while (t_left < t_right) {
while (*t_left < separator) ++t_left;
while (*t_right < separator) --t_right;
if (t_left<=t_right) {
std::swap(*t_left,*t_right);
++t_left;
--t_right;
}
if (left < t_right) Q_sort(left,t_right + 1);
if (t_left < right) Q_sort(t_left + 1,right);
}
}
但是当我传递迭代器
std::vector<int> for_sort(10);
Q_sort(std::begin(for_sort),std::end(for_sort));
并尝试通过它们找到它,我得到调试断言失败:
Expression: cannot seek vector iterator before begin
我想可能是因为 right 指向一个超出向量边界的值,但是这样的调用:
Q_sort(std::begin(for_sort),std::end(for_sort)-1);
给出相同的结果。然后我尝试编写辅助函数
template <typename T,typename Alloc>
inline T* begin_ptr(std::vector<T,Alloc>& vec) {
return vec.empty() ? nullptr : &vec[0];
}
template <typename T,typename Alloc>
inline T* end_ptr(std::vector<T,Alloc>& vec) {
return vec.empty() ? nullptr :begin_ptr(vec)+vec.size();
}
但是有了这样的调用:
std::vector<int> for_sort(10);
Q_sort(begin_ptr(for_sort),end_ptr(for_sort)-1);
我知道随机填充向量时,分隔符始终等于 1。我很乐意帮助您找出问题所在,谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)