【问题标题】:Iterate through a const vector of pointers with auto [duplicate]使用 auto 遍历指针的 const 向量 [重复]
【发布时间】:2018-06-20 15:08:06
【问题描述】:

假设我有以下 const 指针向量:

const std::vector<Component*> components;

我想遍历它并且只在这个向量的一个元素上调用一个方法。这样做是否正确:

for (const auto& item : components) {
  method(item);
}

与使用有什么区别:

for (auto item : components) {
  method(item);
}

与:

void method(Components* component);

【问题讨论】:

    标签: c++ c++11 auto ranged-loops


    【解决方案1】:

    这样做对吗

    这取决于你。

    对于第一种情况,item 的类型将是 Component* const&amp;,它是绑定到 vector 元素的引用。

    对于第二种情况,item 的类型将是 Component*,它(即指针本身)是从 vector 的元素复制而来的。

    method的参数类型为Component*,表示按值/拷贝传递指针,那么这两种情况并没有实际区别。而对于指针(作为内置类型),只需 auto item : components 就可以了。

    【讨论】:

    • 那么如果我不想复制指针,第一种情况更好,对吧?您知道迭代此类向量的更好解决方案吗? (如果我想防止复制并且不想修改对象)
    • @klaus 是的。但是对于包括指针在内的内置类型,避免复制没有多大意义。而且,您希望item 的类型是什么?
    • 我想成为一个指向组件的指针。我认为for (auto&amp; item : components) 就足够了,如果有一天我的向量变成了组件的向量(而不是组件*),它仍然可以工作......对吧?
    • @klaus 好吧,那么 auto item : ... 似乎很好。 auto&amp; 使item 成为对元素的引用,如果将其更改为指向另一事物,则元素也会更改。如果这是你想要的,你应该使用参考。
    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多