标签:class 题目 iostream 奇数 tor 返回 while iterator vector
输入一个整数数组,实现一个函数来解决该数组中数字的位置,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
第一个指针pHead 初始化为数组的第一个元素,第二个指针pTail 初始化为数组的最后一个元素。根据题目要求:所有奇数位于数组的前半部分,偶数位于数组的后半部分;我们只需:
试考虑把题目改成如下情形:
实际上,上面两个问题是我们在开端那个题目的变形,只需改变 while 循环里的条件即可。因此我们可以把这个条件的逻辑框架抽象出来,而把判断的标准变成一个函数指针,也就是用一个单独的函数来判断数字是不是符合条件。因此上面的条件可以变成一个函数来解决:
bool Solution::check(vector<int>::iterator it) { return *it&0x1==1?true:false;//检查是不是奇数,是奇数返回true,偶数返回false }
完整代码:
#include <iostream> #include <algorithm> #include <vector> using namespace std; class Solution { public: void reorder(vector<int> &v); bool check(vector<int>::iterator it); }; void Solution::reorder(vector<int> &v) { if(v.empty()) return; vector<int>::iterator it1=v.begin(); vector<int>::iterator it2=--v.end();//end指向最后一个元素的末尾 while(it1<it2) { while(it1<it2&&check(it1)) ++it1; while(it1<it2&&!check(it2)) --it2; if(it1<it2) swap(*it1,*it2); } } bool Solution::check(vector<int>::iterator it) { return *it&0x1==1?true:false;//检查是不是奇数,是奇数返回true,偶数返回false } int main() { vector<int> v={2,3,5,1,7,8}; Solution s; s.reorder(v); for(auto k:v) cout<<k<<" "; cout<<endl; return 0; }
标签:class 题目 iostream 奇数 tor 返回 while iterator vector
原文地址:https://www.cnblogs.com/tianzeng/p/10176927.html