我有两个数组
array1 = { 2 , 4 , 1 , 5 , 7 , 10 } ;
array2 = { 3 , 1 , 6 , 8 , 9 , 4 };
我的结果数组应该是两个数组中的唯一元素,即
Result = { 2 , 5 , 7 , 10 , 3 , 6 , 8 , 9 };
条件:数组将是未排序的整数值。
答案 0 :(得分:3)
对数组进行排序,然后对它们进行std::set_symmetric_difference。
答案 1 :(得分:0)
这是一种使用标准算法的直接方法
#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
而不是例如std::begin( a1 )
和std::end( a1 )
,您只需编写a1
和a1 + 6
,其中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