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();
输出:

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号