Как сравнить 2 массива элемент за элементом? - PullRequest
0 голосов
/ 13 апреля 2020

Массивы

Я хочу сравнить элемент за элементом 2 массива и распечатать их рядом. Элемент сравнения будет и И сравнение. (т.е. 0 & 1 = 0,0 & 0 = 0,1 & 1 = 1)

int main()
{
ifstream inFile;
int array1[10][10], array2[10][10];
int rows, cols;
OpenInputFile(inFile);

ReadData(rows, cols, array1, array2, inFile);

cout << "Initial values of the arrays processed" << endl;
cout << string(50,'-') << endl;
cout << setw(2*cols) << left << "Array1";
cout << setw(2*cols) << left << "Array2" << endl;;  
PrintArray(array1, rows, cols),PrintArray(array2, rows, cols);
}

1 Ответ

0 голосов
/ 13 апреля 2020

Вот и вы.

#include <iostream>
#include <iomanip>
#include <functional>
#include <iterator>
#include <algorithm>

int main() 
{
    const size_t N = 4;
    int a1[N] = 
    {
        0b10101, 0b01010, 0b10100, 0b00111   
    };

    int a2[N] = 
    {
        0b11100, 0b00110, 0b11111, 0b10001
    };

    int a3[N];
    int a4[N];

    std::transform( std::begin( a1 ), std::end( a1 ),
                    std::begin( a2 ),
                    std::begin( a3 ),
                    std::bit_and<int>() );

    std::transform( std::begin( a1 ), std::end( a1 ),
                    std::begin( a2 ),
                    std::begin( a4 ),
                    std::bit_or<int>() );


    std::cout << std::hex;                
    for ( const auto &item : a1 )
    {
        std::cout << std::setfill( '0' ) << std::setw( 2 ) << item << ' ';
    }       
    std::cout << '\n';

    for ( const auto &item : a2 )
    {
        std::cout << std::setfill( '0' ) << std::setw( 2 ) << item << ' ';
    }       
    std::cout << '\n';

    for ( const auto &item : a3 )
    {
        std::cout << std::setfill( '0' ) << std::setw( 2 ) << item << ' ';
    }       
    std::cout << '\n';

    for ( const auto &item : a4 ) 
    {
        std::cout << std::setfill( '0' ) << std::setw( 2 ) << item << ' ';
    }       
    std::cout << '\n';

    return 0;
}

Вывод программы:

15 0a 14 07 
1c 06 1f 11 
14 02 14 01 
1d 0e 1f 17 

Редактировать: после того, как вы отредактировали свой вопрос, изменив одномерные массивы на двух- Тогда вы можете использовать показанные вызовы алгоритма для каждой пары «строк» ​​исходных массивов в al oop.

Например

for ( size_t i = 0; i < N; i++ )
{
    std::transform( std::begin( a1[i] ), std::end( a1[i] ),
                    std::begin( a2[i] ),
                    std::begin( a3[i] ),
                    std::bit_and<int>() );
}
...