这是一种使用标准算法的简单方法
#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
int a1[] = { 2 , 4 , 1 , 5 , 7 , 10 } ;
int a2[] = { 3 , 1 , 6 , 8 , 9 , 4 };
for ( int x : a1 ) std::cout << x << ' ';
std::cout << std::endl;
for ( int x : a2 ) std::cout << x << ' ';
std::cout << std::endl;
size_t n = std::count_if( std::begin( a1 ), std::end( a1 ),
[&]( int x )
{
return
std::find( std::begin( a2 ), std::end( a2 ), x ) == std::end( a2 );
});
n += std::count_if( std::begin( a2 ), std::end( a2 ),
[&]( int x )
{
return
std::find( std::begin( a1 ), std::end( a1 ), x ) == std::end( a1 );
});
int *result = new int[n];
int *p = result;
p = std::copy_if( std::begin( a1 ), std::end( a1 ), p,
[&]( int x )
{
return
std::find( std::begin( a2 ), std::end( a2 ), x ) == std::end( a2 );
});
std::copy_if( std::begin( a2 ), std::end( a2 ), p,
[&]( int x )
{
return
std::find( std::begin( a1 ), std::end( a1 ), x ) == std::end( a1 );
});
for ( p = result; p != result + n; ++p ) std::cout << *p << ' ';
std::cout << std::endl;
delete [] result;
return 0;
}
输出是
2 4 1 5 7 10
3 1 6 8 9 4
2 5 7 10 3 6 8 9
您可以简单地写成 a1 和 a1 + 6 而不是 std::begin( a1 ) 和 std::end( a1 ),其中 6 是 a1 的大小。
如果允许您对原始数组进行排序,那么程序可能如下所示
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
int a1[] = { 2 , 4 , 1 , 5 , 7 , 10 } ;
int a2[] = { 3 , 1 , 6 , 8 , 9 , 4 };
for ( int x : a1 ) std::cout << x << ' ';
std::cout << std::endl;
for ( int x : a2 ) std::cout << x << ' ';
std::cout << std::endl;
std::sort( std::begin( a1 ), std::end( a1 ) );
std::sort( std::begin( a2 ), std::end( a2 ) );
size_t n = std::count_if( std::begin( a1 ), std::end( a1 ),
[&]( int x )
{
return
!std::binary_search( std::begin( a2 ), std::end( a2 ), x );
} );
n += std::count_if( std::begin( a2 ), std::end( a2 ),
[&]( int x )
{
return
!std::binary_search( std::begin( a1 ), std::end( a1 ), x );
} );
int *result = new int[n];
std::set_symmetric_difference( std::begin( a1 ), std::end( a1 ),
std::begin( a2 ), std::end( a2 ),
result );
for ( int *p = result; p != result + n; ++p ) std::cout << *p << ' ';
std::cout << std::endl;
delete [] result;
return 0;
}
输出是
2 4 1 5 7 10
3 1 6 8 9 4
2 3 5 6 7 8 9 10