【发布时间】:2020-11-06 12:38:33
【问题描述】:
我使用嵌套的for-loop 对 C++ STL <vector> 执行插入排序。第一个for-loop 在迭代器上,第二个在reverse_itr 上。
我需要将索引(迭代器指针值)从第一个循环传递到第二个循环。我尝试了以下方法,但它给了我这个错误
error: no match for ‘operator!=’ (operand types are
‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’ and
‘std::vector<int>::reverse_iterator’ {aka
‘std::reverse_iterator<__gnu_cxx::__normal_iterator<int*, std::vector<int> > >’})
void insertionSort(int size, vector<int> arr) {
for(auto itr = arr.begin(); itr != arr.end() - 1; ++itr) {
int element = *(itr + 1);
cout << "Element being compared with preceding sub-array is : " << element << endl;
for(auto r_itr = (itr + 1); r_itr != arr.rend(); ++r_itr) {
if(*(r_itr+1) <= element) {
*r_itr = element;
break;
}
else {
*r_itr = *(r_itr+1);
}
}
}
}
我在网上搜索了很多,找到了一种将反向迭代器转换为迭代器的方法(使用itr.base()),但反之则不行。
另外,我是 C++ STL 和算法的新手,请随时提出任何方法来改进我的代码,以提高代码的“干净”性或算法本身!
【问题讨论】:
-
您将在您的代码中取消引用
end迭代器(在*(itr + 1)和*(r_itr+1)中)。
标签: c++ sorting stl iterator insertion-sort