我有一个std::map<int, std::vector<SomeStruct>>,
并提供一个查询std::vector<SomeStruct> FindData(int key).
为了防止复制整个数据,我将其修改为std::vector<SomeStruct>& FindData(int key).
但是,没有确定的数据key,所以有时我没有任何回报.
在这种情况下,我声明一个空的文件范围变量std::vector<SomeStruct>并返回它.
但是如果我选择指向vector的指针,std::vector<SomeStruct>* FindData(int key)那么我就可以返回NULL不存在的指针key.
哪一个更好?
我在问题中学到指针std::vector是坏的(或者很奇怪?不确定)(这个指针操作还有其他语法吗?)
我个人也喜欢参考std::vector,所以我可以使用operator[]更简单,但缺点是我必须为它声明一个额外的空变量.
代码示例如下:In SomeClass.h
typedef std::vector<SomeStruct> DataVec;
typedef std::map<int, DataVec> DataMap;
DataMap m_DataMap;
Run Code Online (Sandbox Code Playgroud)
现在在SomeClass.cpp:
情况1:
namespace
{
DataVec EmptyVector;
}
DataVec& FindDatas(int key)
{
DataMap::iterator It = m_DataMap.find(key);
if (It == m_DataMap.end()) return EmptyVec;
return It->second;
}
Run Code Online (Sandbox Code Playgroud)
案例2:
DataVec* FindDatas(int …Run Code Online (Sandbox Code Playgroud)