70,012
社区成员




=====main.cpp=====
#include <iostream>
#include "Sort.h"
typedef TypeVector< T<5>, T<6>, T<8>, T<2>, T<3>, T<9>, T<4> > Tvector; //容器构造5,6,8,2,3,9,4
typedef Sort< Tvector >::Result Result; //Result就是重新排列后的结果
int main( void )
{
..........//打印Result的结果
return 0;
}
============Sort.h============
#ifndef SORT_H_INCLUDED
#define SORT_H_INCLUDED
//结束符
struct TypeNone;
//类型选择元函数
template< bool, typename T, typename U >
struct If_Than;
template< typename T, typename U >
struct If_Than< true, T, U >
{
typedef T Type;
};
template< typename T, typename U >
struct If_Than< false, T, U >
{
typedef U Type;
};
//将数值转换为元函数
template< int N >
struct T
{
enum { VALUE = N };
};
//类型序列容器定义
template< typename T1, typename T2 >
struct TypeList
{
typedef T1 Head;
typedef T2 Tail;
};
template< typename T0, typename... Tn >
struct TypeVector
{
typedef TypeList< T0, typename TypeVector< Tn... >::Type > Type;
};
template< typename T0 >
struct TypeVector< T0 >
{
typedef TypeList< T0, TypeNone > Type;
};
//push_front 你懂的
template< typename T, typename TList >
struct Push_Front
{
typedef TypeList< T, TList > Type;
};
//将两个容器合并 你也懂的
template< typename TList1, typename TList2 >
struct Merge
{
typedef TypeList< typename TList1::Head,
typename Merge< typename TList1::Tail, TList2 >::Type
> Type;
};
template< typename T, typename TList2 >
struct Merge< TypeList< T, TypeNone >, TList2 >
{
typedef TypeList< T, TList2 > Type;
};
//分派元函数,将原来的容器分成奇数和偶数两个容器
template< typename TList >
struct Dispatch;
template< typename Head, typename Tail >
struct Dispatch< TypeList< Head, Tail > >
{
private :
typedef Dispatch< Tail > Type;
typedef typename Type::TypeOdd TypeOddTemp;
typedef typename Type::TypeEven TypeEvenTemp;
public :
typedef typename If_Than< Head::VALUE & 1,
typename Push_Front< Head, TypeOddTemp >::Type,
TypeOddTemp
>::Type TypeOdd;
typedef typename If_Than< ! ( Head::VALUE & 1 ),
typename Push_Front< Head, TypeEvenTemp >::Type,
TypeEvenTemp
>::Type TypeEven;
};
template< >
struct Dispatch< TypeNone >
{
typedef TypeNone TypeOdd;
typedef TypeNone TypeEven;
};
//将分派和合并组合起来
template< typename Tvector >
struct Sort
{
private :
typedef Dispatch< typename Tvector::Type > TListD;
public :
typedef typename Merge< typename TListD::TypeOdd,
typename TListD::TypeEven
>::Type Result;
};
#endif // SORT_H_INCLUDED
package com.zyc.aaa;
public class Test10 {
public static void main(String[] args) {
int A[] = new int[] { 5, 6, 8, 2, 3, 9, 4 };
printArr(A);
}
static void printArr(int[] arr) {
int index = 0;
for (int i = 0; i < arr.length; ++i) {
if (arr[i] % 2 != 0)
System.out.print(arr[i]);
else
arr[index++] = arr[i];
}
for (int i = 0; i < index; ++i)
System.out.print(arr[i]);
}
}
void display_value(int arr[], int size)
{
int i;
for(i=0;i<size;i++){
if(arr[i]&1)fprintf(stderr,"%d,",arr[i]);
else fprintf(stdout,"%d,",arr[i]);
}
}
这个代码在ubuntu上的运行結果,就是题目要求的