如何解决是否可以使用迭代器和加法/除法在向量中找到分隔符?
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 举报,一经查实,本站将立刻删除。