缓存std :: vector的大小是否更快

Tho*_*mas 1 c++ optimization caching hoisting

我正在寻找一个包含std :: vector的C++类,并存储向量的大小.每次修改向量时,类都会更新此大小,从而导致大量冗余代码(因为size()方法始终可以获得最新大小).这真的更快还是编译器优化了size()的迭代使用?

Jam*_*nze 10

首先,与之前发布的内容不同std::vector,我见过的实现(MS和g ++) 不会缓存大小.另一方面,它可以通过一个简单的指针减法来计算,而你用来缓存大小的任何东西几乎肯定会增加比保存更多的开销.


ras*_*mus 6

std::vector::size 具有恒定的时间复杂度,所以是的,它已经存储在向量中并且代码是冗余的.

  • 恒定时间复杂度也可能意味着在执行size()时存在"sleep(1000)".恒定时间并不意味着函数快速返回,这是您在想知道是否缓存返回值时感兴趣的内容. (5认同)
  • @Nawaz:可能不是,我的观点是,在决定是否缓存返回值时,某些函数定义的运行时复杂性不是一个好的参数.查看分析器或反汇编器的输出将是一个很好的论据. (2认同)
  • @rasmus啊所以足够智能和优化的编译器确实存在吗?;-) (2认同)