不使用STL的C++类成员函数实现商品列表按名称字母序排序
实现方案
1. 完善InventoryItem的isLessThan比较函数
该函数用于判断当前商品名称的字典序是否小于传入的商品,我们手动实现字符串比较逻辑,无需依赖任何STL或第三方库:
bool InventoryItem::isLessThan(const InventoryItem& anItem){ const char* curName = this->itemName; const char* targetName = anItem.itemName; // 逐字符比较 while(*curName != '\0' && *targetName != '\0'){ if(*curName < *targetName) return true; if(*curName > *targetName) return false; curName++; targetName++; } // 前缀相同的情况下,更短的字符串排在前面 return *curName == '\0' && *targetName != '\0'; }
如果需要不区分大小写排序,只要在逐字符比较时将字符统一转为大写/小写再判断即可。
2. 给ItemList新增按名称排序的成员函数
首先在itemList.h的ItemList类公有成员声明中新增:
void sortByName();
然后在itemList.cpp中实现排序逻辑,采用手动实现的冒泡排序,完全不依赖STL接口,符合作业要求:
void ItemList::sortByName(){ if(size <= 1) return; // 冒泡排序实现 for(int i = 0; i < size - 1; i++){ for(int j = 0; j < size - 1 - i; j++){ // 若当前元素顺序不对则交换,用移动语义避免深拷贝开销 if(!list[j].isLessThan(list[j+1])){ InventoryItem temp = move(list[j]); list[j] = move(list[j+1]); list[j+1] = move(temp); } } } }
直接调用sortByName()即可完成整个商品列表按名称字母顺序排序的需求。
内容的提问来源于stack exchange,提问作者waytotheworld
相关产品推荐
相关产品推荐

