⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testloopn.cpp

📁 使用递归实现N重循环
💻 CPP
字号:
// TestLoopN.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

// 字符串序列
typedef vector< CString > VEC_STRING;

// 二维数组
typedef vector< VEC_STRING > VEC_DYADIC_STRING;

// 数字
typedef vector< int > VEC_INT;

int nOutNum = 0;

int loop( VEC_DYADIC_STRING vecDyadic, 
		  int& nMax,
		  int& nCurDeep,
		  VEC_INT& vecInt,
		  VEC_INT& vecInt2 );

int deleteVecBehindSepVal( VEC_INT& vecInt,
						   int		nDeletePos );

int _tmain(int argc, _TCHAR* argv[])
{
	VEC_DYADIC_STRING vecDyadic;
	VEC_STRING vecString;
	vecString.push_back( _T( "Owen" ) );
	vecString.push_back( _T( "Jason" ) );
	vecString.push_back( _T( "Erin" ) );
	vecDyadic.push_back( vecString );
	vecString.clear();
	vecString.push_back( _T( "Joy" ) );
	vecString.push_back( _T( "Frank" ) );
	vecString.push_back( _T( "Jack" ) );
	vecDyadic.push_back( vecString );
	vecString.clear();
	vecString.push_back( _T( "Todd" ) );
	vecString.push_back( _T( "Tracy" ) );
	vecString.push_back( _T( "Bees" ) );
	vecString.push_back( _T( "Warren" ) );
	vecDyadic.push_back( vecString );
	vecString.clear();
	vecString.push_back( _T( "STL" ) );
	vecString.push_back( _T( "COM" ) );
	vecString.push_back( _T( "MFC" ) );
	vecString.push_back( _T( "Java" ) );
	vecString.push_back( _T( "Design Pattern" ) );
	vecDyadic.push_back( vecString );
	vecString.clear();
	vecString.push_back( _T( "BasketBall" ) );
	vecString.push_back( _T( "Badminton" ) );
	vecString.push_back( _T( "Tenis" ) );
	vecString.push_back( _T( "Football" ) );
	vecString.push_back( _T( "Ping Pang" ) );
	vecString.push_back( _T( "volleyball" ) );
	vecDyadic.push_back( vecString );

	VEC_INT vecInt;
	VEC_INT vecInt2;
	int nMax = vecDyadic.size();
	int nCurDeep = 0;
	loop( vecDyadic, nMax, nCurDeep, vecInt, vecInt2 );

	cout<<_T( "The number of out : ")<<nOutNum<<endl;

	return 0;
}


int loop( VEC_DYADIC_STRING vecDyadic, 
		  int& nMax,
		  int& nCurDeep,
		  VEC_INT& vecInt,
		  VEC_INT& vecInt2 )
{
	vecInt.push_back( nCurDeep );
	for ( UINT i = 0; i < vecDyadic[nCurDeep].size(); i++ )
	{
		if ( nMax > 1 )
		{
			nMax--;
			nCurDeep++;
			vecInt2.push_back( i );
			loop( vecDyadic, nMax, nCurDeep, vecInt, vecInt2 );
		}
		else
		{
			//char* pData;
			//USES_CONVERSION;
			//pData = T2A( vecDyadic[nCurDeep][i] );
			for ( UINT j = 0; j < vecInt2.size(); j++ )
			{
				cout<<vecDyadic[vecInt[j]][vecInt2[j]]<<_T( "	" );
			}
			cout<<vecDyadic[nCurDeep][i]<<endl;
			nOutNum++;
		}
	}
	deleteVecBehindSepVal( vecInt, nCurDeep );
	nMax++;
	nCurDeep--;
	deleteVecBehindSepVal( vecInt2, nCurDeep );

	return 0;
}


int deleteVecBehindSepVal( VEC_INT& vecInt,
						   int		nDeletePos )
{
	VEC_INT::iterator iter;
	int nPos = 0;
	iter = vecInt.begin();
	if ( nDeletePos == 0 )
	{
		vecInt.erase( iter, vecInt.end() );
	}
	else
	{
		for ( ; iter != vecInt.end(); )
		{
			nPos++;
			iter++;
			if ( nPos == nDeletePos )
			{
				vecInt.erase( iter, vecInt.end() );
				break;
			}
		}
	}

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -