编译器是否优化了语句"for"第二个条件?
Does the compiler optimize the second condition in "for" statement?
我希望通过索引通过向量进行迭代,然后我有:
for(size_t i=0;i<v.size();++i)
{...}
我知道使用迭代器访问更有效,但是我只想在编译器优化的技术上进行讨论。
我的问题是,这个" v.size()"是否仅执行一次或多次执行?
或,编译器将帮助我确定是否需要足够计算大小,或者需要通过任何优化策略来多次调用尺寸 - 因此我不必:
size_t s=v.size()
for(size_t i=0;i<s;++i)
使代码更有效?
我的问题是,这个" v.size()"仅执行一次或多次执行?
每当循环主体完成执行时,它会多次执行,以检查是否应该再次执行。
编译器可能会或可能不会在不多次调用size()
的情况下优化代码,这仅取决于编译器。
如果编译器可以保证您不会在循环中修改v
,那么是的,编译器完全有可能优化它。如果不能,那么它可能(如果是这样,那么编译器很差)就不会,并且无法优化它,因为编译器然后会生成对完全不同的代码,然后你写的。
另外,即使编译器没有将其优化,您也可以节省1或2个CPU周期,这实际上没有。size()
是O(1)
,称其不应做其他事情,只能从向量返回成员变量。不要过早地优化。
相关文章:
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 等待整个 omp 块完成,然后再调用第二个函数
- 我想在C++中读取一些多个字符,但它永远不会读取第二个字符
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 将第二个 GATT 服务添加到 Movesense 容器
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 使第二个类的构造函数成为第一个类中的友元函数
- 为什么第二个代码给出了预期的结果,而第一个代码却没有?
- 为什么第一个代码块产生垃圾值,而第二个代码块将类成员的值相加?
- 编译器是否优化了语句"for"第二个条件?
- 为什么 for 循环没有达到循环的第二个条件中设置的数字
- 如何在for循环中声明第二个迭代器
- 我的 for 循环第一次正确输入,但第二次不正确,并显示第二个输入的输出。我不明白为什么会这样。
- For循环多个变量,第二个变量不更新
- 使用函数作为'for'循环的第二个参数
- 在 for 构造中对第二个表达式使用 size() 总是不好的