简体   繁体   中英

How to compare values of two vectors

Is anybody there who has a code on how to compare values of two arrays?

I have two vectors and I am looking for the biggest and equal value of the both list.

Here is the code:

void fractionInLowestTerm(int fNumerator, int fDenominator)
{

    //let's get the dividers of fNumerator and fDenominator

    std::vector<int> dividerOfNumerator;
    std::vector<int> dividerOfDenominator;

    for (int i = 1; i <= fNumerator; i++) {

        if (fNumerator % i == 0) {
            dividerOfNumerator.push_back(i);
        }
    }
    for (int j = 1; fDenominator <= j; j++) {
        if (fDenominator % j == 0) {
            dividerOfDenominator.push_back(j);
        }
    }

    // let's get the greatest common divider of a and b;
    int pgcd = 1;

    // I do not know how to compare the values of dividers to get the greatest common value on a and b there is the code I started writing to get that
    for (int m = 0; m <= dividerOfNumerator.size() && m <= dividerOfDenominator.size(); m++) {
    }
}

If I understand the problem correctly, you want to compare the elements in two arrays for each index and save the greater one into a third array. In this case, just use your favourite max function for each index. For example:

void compare(int* array1, int* array2, int* array3, int size)
{
    for (int member = 0; member < size; ++member) {
        array3[member] = std::max(array1[member], array2[member]);
    }
}

or if you want to compare lists and write into third array that which array has bigger value in that index you can use following code

void compare(int* array1, int* array2, int* array3, int size)
{
    for (int member = 0; member < size; ++member) {
        if (array1[member] > array2[member]) {
            array3[member] = 1;
        }
        else if (array1[member] < array2[member]) {
            array3[member] = 2;
        }
        else if (array1[member] == array2[member]) {
            array3[member] = 0;
        }
    }
}

Since the vector s containing the divisors are already sorted, you can use the std::set_intersection algorithm like this:

std::vector<int> commonDivisors;

std::set_intersection(dividerOfNumerator.begin(), dividerOfNumerator.end(),
                      dividerOfDenominator.begin(), dividerOfDenominator.end(),
                      std::back_inserter(commonDivisors));

int pgcd = commonDivisors.back();  // guaranteed to be non-empty since 1 is always a divisor

Here's a demo .

Hello as you can see on the function name I wanted to write a function which put a function on the lowest term. I wanted to go through the gcd but I saw that it would consumes too much memory so here is what I've done. If it can help any member of the forum.

    void fractionInLowestTerm(int fNumerator, int fDenominator){
    
    //let's get on the divider of the number
    for (int i = 1; i < fNumerator and  i <fDenominator; i++) {
        
        if (fNumerator%i == 0 and fDenominator%i == 0) {
            fNumerator /= i;
            fDenominator /= i;
            i = 1;
        }
    }
    
    
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM