gpt4 book ai didi

c++ - 为什么使用引用作为迭代器

转载 作者:搜寻专家 更新时间:2023-10-31 00:50:59 24 4
gpt4 key购买 nike

我正在学习 std::vector 的 emplace() 并偶然发现了这段代码:

// vector::emplace
#include <iostream>
#include <vector>

int main ()
{
std::vector<int> myvector = {10,20,30};

auto it = myvector.emplace ( myvector.begin()+1, 100 );
myvector.emplace ( it, 200 );
myvector.emplace ( myvector.end(), 300 );

std::cout << "myvector contains:";
for (auto& x: myvector)
std::cout << ' ' << x;
std::cout << '\n';

return 0;
}

我想知道为什么在 for 循环中他们使用引用 auto& x 而不是简单的拷贝,我尝试不使用 & 并且效果相同,这是避免复制的安全措施还是性能技巧?

最佳答案

在此上下文中,autoauto& 之间的另一个区别是 auto& 允许您修改 vector 中的值。这可能是一个等待发生的不良错误。理想情况下,如果你只是为了阅读而获取引用,你应该使用 const 引用:const auto &

当 vector 包含的对象不仅仅是基本数字或指针类型时,使用引用的好处是它不会将整个对象复制到临时对象。如果该对象具有任何深层复制语义,或者可能是一个 shared_ptr,那么可能会存在完全避免的显着开销。

对于基本类型,复制通常非常快,因此首选单个拷贝,但如果要求编译器优化器引用基本类型然后多次使用该引用,您可以期望编译器优化器做“正确的事情”,所以对于模板编程,当您不知道类型时,您应该优先使用 const-ref 而不是拷贝,以保持代码简单。

关于c++ - 为什么使用引用作为迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56401030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com