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(涂聚文)