【问题标题】:C++ iterate over vector of pairs with destructuringC++ 使用解构迭代对向量
【发布时间】:2020-01-12 15:09:16
【问题描述】:

我遇到了以下代码:

vector<pair<int, int>> vec;
//...
for (auto &[f, s] : vec)
{
  //do something with f and s
}

这种语法是如何工作的([f, s] : vec)以及它引入了什么标准? 我可以使用它从任何结构/类中获取字段值还是它是特定于元组/对的东西?

另外,这种方法对性能有何影响?

在 C++11 中,我使用 auto 的方式如下:

for (auto &it : vec)
{
  //do something with it.first and it.second
}

【问题讨论】:

标签: c++


【解决方案1】:

您在此处看到的是结构化绑定。有关此功能的完整说明,请参阅https://en.cppreference.com/w/cpp/language/structured_binding。结构化绑定是在 C++17 中引入的。它们提供了一种新语法来为类型的成员提供标识符。

通常,您也可以将结构化绑定与您自己的类型一起使用,但这需要更多的努力。默认情况下,支持数组、类似元组的对象和聚合。

【讨论】:

    【解决方案2】:

    结构化绑定就是你要找的,否则你可以做

    template <typename T, typename N>
    struct pair 
    { 
        T first; 
         N second; 
    };
    

    并以 C 方式迭代,假设您的类型可以被复制、移动、分配等。

    【讨论】:

      猜你喜欢
      • 2015-02-19
      • 2020-11-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      相关资源
      最近更新 更多