C++ Vector at/[]运算符速度

sub*_*sub 7 c++ stl vector

为了给函数提供修改向量的选项,我不能这样做

curr = myvec.at( i );
doThis( curr );
doThat( curr );
doStuffWith( curr );
Run Code Online (Sandbox Code Playgroud)

但我必须这样做:

doThis( myvec.at( i ) );
doThat( myvec.at( i ) );
doStuffWith( myvec.at( i ) );
Run Code Online (Sandbox Code Playgroud)

(正如我的另一个问题的答案所指出的那样)

  • myvec.at()那时我打算打个电话.与使用变量存储结果的第一个示例相比,它有多快?

  • 我有不同的选择吗?我可以以某种方式使用指针吗?

当它变得严重时,myvec.at()每秒会有数千个呼叫.所以每个小表现都很重要.

Mic*_*fik 18

您可以使用参考:

int &curr = myvec.at(i);
// do stuff with curr
Run Code Online (Sandbox Code Playgroud)

at成员函数执行边界检查,以确保该参数是的规模内vector.分析只是确切地知道它比它慢多少的方法operator[].在此处使用引用允许您执行一次查找,然后在其他位置使用结果.const如果你想保护自己不会意外地改变价值,你可以把它作为参考.

  • @Steve,这是一个好点.我假设OP正在根据给定的示例代码修改向量中的*值*.如果函数可能修改了向量本身,我们需要一种不同的方法. (2认同)