检查std :: vector索引是否未超出范围的最快方法是什么?

kar*_*jee 0 c++ stdvector

通常,我想确保自己一次处于函数主体的顶部。我执行此操作的不同方法是:

// I don't like this much as it stops the program when I may not want to
assert( idx < v.size() );

if( !(idx < v.size()) )
{
    // take corrective action ...
}

if( v.size() <= idx )
{
    // take corrective action ..
}
Run Code Online (Sandbox Code Playgroud)

在第二种和第三种方法之间(也许还有其他方法),哪种方法更有效?

orl*_*rlp 5

只需使用

idx < vec.size()
Run Code Online (Sandbox Code Playgroud)

并完成它。你不会让你的应用程序的任何通过在这个问题上花费一分钟快。

另外,请考虑检查访问权限:

try {
    vec.at(idx) = stuff;
} catch (std::out_of_range& err) {
    // oh dear god
}
Run Code Online (Sandbox Code Playgroud)

  • 我想在开始时进行一次检查的全部目的是*不必*稍后再使用已检查的访问权限... (2认同)