VC++判断函数返回的是否为空结构体(即未找到的情况) 判断函数返回的是否为空结构体(即未找到的情况),可以通过以下两种方式实现: - 默认值检测法(推荐方案)
在调用函数后检查返回结构体的ID是否为默认值(假设ID为-1表示无效值) - GMKongStruct result = FindByID(vecData, targetID);
- if(result.ID == -1) { // 假设-1是无效ID
- // 处理未找到的情况
- }
复制代码 辅助标记检测法
修改函数返回值为std::pair,包含查找状态标记
- #include <utility>
- #include <vector>
- std::pair<GMKongStruct, bool> FindByIDEx(const std::vector<GMKongStruct>& vec, int targetID) {
- auto it = std::find_if(vec.begin(), vec.end(),
- [targetID](const GMKongStruct& item){
- return item.ID == targetID;
- });
-
- return it != vec.end() ?
- std::make_pair(*it, true) :
- std::make_pair(GMKongStruct{}, false);
- }
复制代码调用时通过second成员判断是否找到:auto [item, found] = FindByIDEx(vec, 1001);
调用std::pair<GMKongStruct, bool> FindByIDEx函数时,可通过结构化绑定(C++17特性)或直接访问pair成员两种方式处理返回值34:
- 结构化绑定方式(推荐)
- auto [foundItem, isExist] = FindByIDEx(vecData, targetID);
- if(isExist) {
- // 使用foundItem处理找到的数据
- } else {
- // 处理未找到情况
- }
复制代码 直接访问pair成员方式 - std::pair<GMKongStruct, bool> result = FindByIDEx(vecData, targetID);
- if(result.second) { // 通过second成员判断是否找到
- GMKongStruct item = result.first; // 通过first成员获取数据
- // 处理找到的数据
- }
复制代码
两种方式均通过bool类型的second成员标识查找状态,true表示找到有效数据,false表示未找到。结构化绑定方式代码更简洁,但需要C++17及以上标准支持
两种方案各有优势:方案1实现简单但依赖ID默认值约定,方案2通过bool值显式标识查找状态更可靠
|