这一篇,是在2个数组中,找相同的值。
假设,这两个数组已经排好序(升序),那么只需要遍历一次即可。
首先设两个下标,分别初始化为两个数组的起始地址,依次向前推进 。推进的规则是比较两个数组中的数字,小的那个数组的下标向前推进一步,直到任何一个数组的下标到达数组末尾时,如果这时还没碰到相同的数字,说明数组中没有相同的数字。[1]
代码如下:
#include <QCoreApplication>
#include <iostream>
#include <map>
#include <set>
using namespace std;
bool findcommon2(int a[], int size1, int b[], int size2, vector<int> &vec)
{
int i=0,j=0;
while(i<size1 && j<size2) {
if(a[i]==b[j]) {
vec.push_back(a[i]);
i++;
j++;
}
if(a[i]>b[j])
j++;
if(a[i]<b[j])
i++;
}
return false;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int data[10] = {1,2,3,4,5,6,7,8,9,10};
int rt[15] = {5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
vector<int> vec;
findcommon2(data, 10, rt, 15, vec);
vector<int>::iterator it;
it = vec.begin();
for (;it != vec.end(); ++it) {
cout << *it << endl;
}
return a.exec();
}
//
参考文献:
[1] http://blog.csdn.net/lonelywinter340/article/details/3292843
---