Ti mando il programma completo così vedi anche gli include vari. in sostanza x inserire dei dati i vettori hanno la funzione push_back.
#include <vector>
#include <iostream>
#include <fstream>
#include <time.h>
#include <algorithm>
using namespace std;
int main(void)
{
const int _diffValue = 3;
time_t start,end;
std::vector<int> vec1;
std::vector<int> vec2;
std::vector<int>::iterator it1;
std::vector<int>::iterator it2begin,it2end,it2;
/* questo è il tuo esempio.
ifstream IN1("dati.dat", ios::in);
ifstream IN2("dati2.dat", ios::in);
int a = 0;
while(IN1.good())
{
IN1 >> a;
vec1.push_back(a);
}*/
int i = 0;
for(i = 0; i < 100000; i++)
{
vec1.push_back(i);
vec2.push_back(2*i);
}
int diff = 0;
time(&start);
sort(vec2.begin(),vec2.end());
for(it1 = vec1.begin(); it1 != vec1.end(); ++it1)
{
it2begin = std::lower_bound(vec2.begin(), vec2.end(), *it1 - _diffValue + 1);
it2end = std::upper_bound(vec2.begin(), vec2.end(), *it1 + _diffValue - 1);
for(it2 = it2begin; it2 != it2end; ++it2)
cout << *it1 << " " << *it2 << " " << abs(*it1 - *it2) << endl;
}
time(&end);
double timeDiff = difftime(end,start);
cout << "Took " << timeDiff << " seconds!" << endl;
cin.get();
return 0;
}
lower_bound cerca il valore + piccolo rispetto a quello inserito. upper_bound il + grande. avendo le due posizioni (siccome il vettore e stato ordinato tramite sort) puoi sapere il range dei dati che soddisfano i tui criteri.