如何使用初始化列表循环修改元素

How to use initializer-list loops for modifying elements?

本文关键字:修改 元素 循环 列表 何使用 初始化      更新时间:2023-10-16

我可以使用读取访问

轻松模拟for .. in循环
std::list<int> foo, bar, baz;
int main() 
{
  foo.push_back(3);
  foo.push_back(2);
  bar.push_back(1);
  for (auto &x : {foo, bar, baz}) {
    // x.push_back(42);
    std::cout << x.size() << std::endl;
  }
  return 0;
}

此打印:

2
1
0

我应该做什么,以便我可以修改实际对象,就像在评论行中一样:

// x.push_back(42);

我们从C中知道的基于指针的技巧可能如下所示

  for (auto x : { &foo, &bar, &baz }) {
    x->push_back(42);
    std::cout << x->size() << std::endl;
  }

但是,这假设您实际上想与 ointer 对象一起工作,而不是它们的副本。(您最初发布的代码实际上可以使用副本。(

您可以使用std::reference_wrapper

for (std::list<int>& x : {std::ref(foo), std::ref(bar), std::ref(baz)}) {
  x.push_back(42);
  std::cout << x.size() << std::endl;
}