#include <iostream>
#include <vector>
#include <cmath>
template <typename DataType>
double mycosine(typename::std::vector<DataType>& arrayA, typename::std::vector<DataType>& arrayB) {
    if(arrayA.empty() || arrayB.empty())
        return 0;
    double sumarrayA=0.0,sumarrayB=0.0;
    double cosine=0.0;
    for(typename::std::vector<DataType>::iterator itA=arrayA.begin(),itB=arrayB.begin();itA!=arrayA.end(),itB!=arrayB.end();++itA,++itB) {
        sumarrayA+=(*itA)*(*itA);
        sumarrayB+=(*itB)*(*itB);
        cosine+=(*itA)*(*itB);
    }
    sumarrayA=sqrt(sumarrayA);
    sumarrayB=sqrt(sumarrayB);
    if((sumarrayA-0<0.0001) || (sumarrayB-0<0.0001)) {
        return 0;
    }
    cosine/=(sumarrayA*sumarrayB);
    return cosine;
}
int main() {
    int length;
    std::vector<int> arrayA;
    std::vector<int> arrayB;
    char tag=‘y‘;
    int temp;
    while(tag==‘y‘) {
        arrayA.clear();
        arrayB.clear();
        std::cin>>length;
        for(size_t i=0;i<length;++i) {
            std::cin>>temp;
            arrayA.push_back(temp);
        }
        for(size_t i=0;i<length;++i) {
            std::cin>>temp;
            arrayB.push_back(temp);
        }
        std::cout<<mycosine(arrayA,arrayB)<<std::endl;
        std::cin>>tag;
    }
    return 0;
}
原文:http://www.cnblogs.com/donggongdechen/p/7768718.html