我有一个std::map<int, std::vector<SomeStruct>>
,
并提供如下查询std::vector<SomeStruct> FindData(int key)
.
为了防止复制整个数据,我将其修改为std::vector<SomeStruct>& FindData(int key)
.
但具体情况不会有任何数据key
,所以有时我没有什么可回报的。
在这种情况下,我声明一个空的文件范围变量std::vector<SomeStruct>
并归还它。
但如果我选择指向向量的指针,那就是std::vector<SomeStruct>* FindData(int key)
然后我就可以回来了NULL
对于不存在的key
.
哪一个更好?
我了解到该指针指向std::vector
问题中很糟糕(或很奇怪?不确定)(这个指针操作还有其他语法吗? https://stackoverflow.com/questions/15703842/is-there-other-syntax-for-this-pointer-operation/15703927?noredirect=1#comment22312516_15703927)
我个人喜欢参考std::vector
太,这样我就可以使用operator[]
更容易,但缺点是我必须为其声明一个额外的空变量。
代码示例如下:SomeClass.h
typedef std::vector<SomeStruct> DataVec;
typedef std::map<int, DataVec> DataMap;
DataMap m_DataMap;
Now In SomeClass.cpp
:
Case 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;
}
Case 2:
DataVec* FindDatas(int key)
{
DataMap::iterator It = m_DataMap.find(key);
if (It == m_DataMap.end()) return NULL;
return &(It->second);
}
参考:
优点:看起来很正常std::vector
.
缺点:声明了额外的变量。
指针:
优点:查询函数更短并且不需要其他变量。
缺点:看起来很奇怪(?!),而且你不能使用p[i]
, 你必须(*p)[i]
,这很烦人。
哪一个更好?