我使用[]
来访问数学代码中的向量。我不想使用at()
,因为我不喜欢异常。当我不确定我的索引时,我很高兴明确检查代码中的边界。所以,我的代码中充满了这种语句:if(n >= 0 && n < vec.size())
。
我的问题是,我没有在std::vector
中找到像vec.isok(n)
这样的电话直接说明了是或没有索引是否在界限。
我忽略了吗?在我的情况下,它会产生更多更简洁的代码。
顺便说一下,我认为显式检查比at()
调用更有效,因为我通常使用嵌套的向量结构,当我检查索引n
一次时,我会使用{{ 1}}在n
括号内多次,有时数千次。所以,我的问题是,你是否在if
中没有进行两次测试就看到了一种更简洁的方法。谢谢!
答案 0 :(得分:4)
是的,std::vector
没有像std::vector::isOK(x)
那样的事情。您可以在std::vector
中扭曲SafeVector
并发布要使用的安全接口。
答案 1 :(得分:3)
最简单的方法:
template <typename T>
inline bool isok(const std::vector<T>& vec,
typename std::vector<T>::size_type index)
{
return index >= 0 && index < vec.size();
}
然后将其称为isok(vec, i)
答案 2 :(得分:1)
您可以拥有自己的访问向量索引的实现。在您的这个功能中,您可以使用这些检查(一次性投资)并使用此功能以便以后访问。但同样,即使你使用这个函数,你仍然需要担心它在返回索引时会返回什么。
您还可以使用其他一些数据结构。如果这些项目可以包含密钥(任何唯一标识符),则可以使用地图。