注意代码第34行的判断语句条件是 numA+1<VecA.size() ,而不是 numA+2<VecA.size() ,因为Vec[num]就存储了一个数据,num+2的话就是判断了接下来的3个位置是否存储了数据。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n,temp;
cin>>n;
int out[n];
std::vector<int> VecA,VecB;//Odd为奇数,Even为偶数
for(int i=0 ; i<n ;i++)
{
cin>>temp;
if(temp%2==1)
VecA.push_back(temp);
else
VecB.push_back(temp);
}//分别排队
//A优先输出
/**
printf("TestA\n");
for(int i=0 ; i<VecA.size() ;i++)
printf("%d ",VecA[i]);
printf("\n");
printf("TestB\n");
for(int i=0 ; i<VecB.size() ;i++)
printf("%d ",VecB[i]);
printf("\n");
*/
int numA,numB,numOut;
numA=numB=numOut=0;//处理人数
while( numA<VecA.size() && numB<VecB.size() )
{
if(numA+1<VecA.size())
{
out[numOut++]=VecA[numA++];
out[numOut++]=VecA[numA++];
}
else
out[numOut++]=VecA[numA++];
out[numOut++]=VecB[numB++];
}
if( numA<VecA.size() )
while(numOut<n)
out[numOut++]=VecA[numA++];
else if( numB<VecB.size() )
while(numOut<n)
out[numOut++]=VecB[numB++];
for(int i=0 ;i<n-1 ;i++)
printf("%d ",out[i]);
printf("%d",out[n-1]);
return 0;
}