cpp: vector

 

// NarcissisticInfo.h : 
//练习案例:水仙花数 100 - 1000  NarcissisticNumber
//案例描述:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
//例如:1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153
//请利用do...while语句,求出所有3位数中的水仙花数
// 2023年4月5日 涂聚文 Geovin Du edit.
// https://mathworld.wolfram.com/NarcissisticNumber.html
//

#pragma once
#ifndef NARCISSISTICINFO_H
#define NARCISSISTICINFO_H

#include <iostream>
#include<string.h>
#include<math.h>

using namespace std;


/**
 * @brief 
 * \author geovindu.
 * \date 20230-4-10
 * vs C++ 两种注释方法,可以用如C#的注释方法
 */
namespace geovindu
{

	/**
	 * @brief 水仙花数 实体类.
	 */
	class NarcissisticInfo
	{

	private:

		string NarcissisticName;

		int NarcissisticDigit;

		

	public:



		/// <summary>
		/// 
		/// </summary>
		/// <param name="name"></param>
		/// <param name="digit"></param>
		NarcissisticInfo(string name,int digit)
		{
			this->NarcissisticName = name;
			this->NarcissisticDigit = digit;
		}
		/// <summary>
		/// 
		/// </summary>
		/// <param name="child"></param>
		NarcissisticInfo(const NarcissisticInfo& child) {
			this->NarcissisticName = child.NarcissisticName;
			this->NarcissisticDigit = child.NarcissisticDigit;
		}
       /*
		NarcissisticInfo& operator=(const NarcissisticInfo& child) {//第一个&表明返回值是计算结果的引用,第二个&表明使用c的引用,const表明不会改变c
			this->NarcissisticName = child.NarcissisticName;
			this->NarcissisticDigit = child.NarcissisticDigit;
			return *this;//返回对象的引用(如果是前面不是NarcissisticInfo &而是NarcissisticInfo,那么返回的就是对象的拷贝)
		}
		*/
	


		/**
		 * @brief
		 * .
		 * 
		 * \param narcissisticName
		 */
		void setNarcissisticName(string narcissisticName)
		{
			this->NarcissisticName = narcissisticName;
		}

		/**
		 * .
		 * 
		 * \param narcissisticDigit
		 */
		void setNarcissisticDigit(int narcissisticDigit)
		{
			this->NarcissisticDigit = narcissisticDigit;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		string getNarcissisticName()
		{
			return NarcissisticName;
		}
		/**
		 * @brief.
		 * 
		 * \return 
		 */
		int getNarcissisticDigit()
		{
			return NarcissisticDigit;
		}

		//void ShowInfo();


	};


	/**
	 * @brief 水仙花数显示.
	 * 
	 */
	//void NarcissisticInfo::ShowInfo()
	//{

		//cout << "名称:" << this->getNarcissisticName() << ",水仙花数:" << this->getNarcissisticDigit() << endl;
	//}

}




#endif

  

// NarcissisticList.h : 
//练习案例:水仙花数 100 - 1000  NarcissisticList
//案例描述:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
//例如:1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153
//请利用do...while语句,求出所有3位数中的水仙花数// 2023年4月5日 涂聚文 Geovin Du edit.
//https://bytes.com/topic/c/answers/434432-how-do-you-return-list-best-practices
// 
//

#pragma once
#ifndef NARCISSISTICLIST_H 
#define NARCISSISTICLIST_H 

#include <iostream> 
#include <string> 
#include <vector> 
#include <memory> 
#include <iostream> 
#include <string> 
#include <list>

#include "NarcissisticInfo.h"

/// <summary>
/// 
/// </summary>
namespace geovindu
{

	/**
	 * @brief  水仙花数集合类.
	 * 水仙花数集合类.
	 */
	class NarcissisticList
	{

	private:

		list<NarcissisticInfo> NarcissisticInfos;



	public:

		/**
		 * @brief.
		 * 
		 * \param narcissisticInfos
		 */
		void setNarcissisticList(list<NarcissisticInfo> narcissisticInfos)
		{
			this->NarcissisticInfos = narcissisticInfos;
		}
		/**
		 * @brief.
		 * 
		 * \return 
		 */
		list<NarcissisticInfo> getNarcissisticInfo()
		{
			return NarcissisticInfos;
		}
		/**
		 * @brief.
		 * 
		 * \param narcissisticInfos
		 */
		//NarcissisticList(list<NarcissisticInfo> narcissisticInfos)
		//{
			//this->NarcissisticInfos = narcissisticInfos;
		//}
		/**
		 * @brief.
		 * 
		 */
		void ShowInfo();
	};

}


#endif

  

写一个集合类对象,或是用vector容器处理,就如CSharp一样的返回值。

 

 

/**
	 * @brief 水仙花数.
	 * 
	 * \return 返回实体类集合
	 */	
	
	NarcissisticList NarcissisticNumber::setNarcissisticInfoList()
	{
		int i = 100;
		int min = 100;
		int max = 1000;
		//int countA = 0;
		list<NarcissisticInfo> list;
		//NarcissisticInfo info;
		NarcissisticList nlist;
		do
		{
			if (NarcissisticCheck(i)) //IsNarcissisticNumber
			{
				//cout << "" << i << "是水仙花数" << endl;
				//info.setNarcissisticDigit(i);
				//info.setNarcissisticName("水仙花数");
				NarcissisticInfo info("水仙花数", i);
				list.push_back(info);

				countA++;
			}
			i++;

		} while (i >= min && i < max);

		nlist.setNarcissisticList(list);
		cout << "实体类操作,水仙花数有【"  << countA << "】个数。" << endl;
		return nlist;
	}

	/// <summary>
	/// 水仙花数 vector容器
	/// list<NarcissisticInfo> csharp 是这样返回值
	/// </summary>
	/// <returns>返回对象数组</returns>
	vector<NarcissisticInfo> NarcissisticNumber::setNarcissisticInfoVectorList()
	{
		int i = 100;
		int min = 100;
		int max = 1000;
		//int countA = 0;
		vector<NarcissisticInfo> list;
		//list<NarcissisticInfo> lists;
		//vector<NarcissisticInfo> info;
		//NarcissisticList nlist;
		do
		{
			if (NarcissisticCheck(i)) //IsNarcissisticNumber
			{
				//cout << "" << i << "是水仙花数" << endl;
				//info.setNarcissisticDigit(i);
				//info.setNarcissisticName("水仙花数");
				//vector<list<NarcissisticInfo>>;
				//vector<NarcissisticInfo> info;
				NarcissisticInfo info("水仙花数", i);
				//lists.push_back(info);

				list.push_back(info);
				countA++;
			}
			i++;

		} while (i >= min && i < max);

		//nlist.setNarcissisticList(list);
		cout << "vector容器,实体类操作,水仙花数有【" << countA << "】个数。" << endl;
		return list;
	}

  

 

/**
	 * @brief  水仙花数.
	 * 
	 * \return 
	 */
	NarcissisticList Geovin::getInfo()
	{

		NarcissisticNumber number;
		//NarcissisticInfo info = number.GetNarcissisticInfo("水仙花数", 153);
		//NarcissisticInfo info("水仙花数",153);
		// 
		//info.setNarcissisticDigit(39);
		//info.setNarcissisticName("");
		NarcissisticList infos = number.setNarcissisticInfoList();
		for (auto info : infos.getNarcissisticInfo())
		{
			cout << "实体类返回:" << info.getNarcissisticName() << "水仙花数" << info.getNarcissisticDigit() << endl;
		}
		cout << "共有个数:" << infos.getNarcissisticInfo().size() << "" << endl;
		return infos;
	}

	/**
	 * @brief 水仙花数.实体类 vector
	 * 100至1000内的三位数的水仙花数
	 */
	list<NarcissisticInfo> Geovin::DisplayNarcissicticInfos()
	{
		NarcissisticNumber number;
		list<NarcissisticInfo> infos;
		vector<NarcissisticInfo> vecotrlist = number.setNarcissisticInfoVectorList();

		//infos = number.setNarcissisticList(); //不能赋值,类集合 list
		if (!vecotrlist.empty())
		{
			for (NarcissisticInfo info : vecotrlist)
			{
				cout << "vector操作:" << info.getNarcissisticName() << ",水仙花数:" << info.getNarcissisticDigit() << endl;
				infos.push_back(info);
			}
		}
		
		//cout << "水仙花数有【" << number.countA << "】个数。" << endl;
		return infos;
	}

  

调用:

	//vector vector容器
	list<NarcissisticInfo> dulist = geovin.DisplayNarcissicticInfos();
	if (!dulist.empty())
	{

		for (auto inf : dulist)
		{
			cout << "vector:"<< inf.getNarcissisticName() << "" << inf.getNarcissisticDigit() << endl;
		}
	}


	//水仙花数 100-1000  实体类
	//geovin.getInfo();
	geovin.getInfo().ShowInfo();

	//
	//geovin.DisplayNarcissicticInfos();

	//水仙花数 100-1000 
	geovin.DisplayNarcissisticNumber();

  

输出:

 

posted @ 2023-04-13 17:10  ®Geovin Du Dream Park™  阅读(32)  评论(0)    收藏  举报