【问题标题】:for_each( for_each() )?for_each(for_each())?
【发布时间】:2013-11-14 09:03:03
【问题描述】:

这行得通,for_each 传递向量

std::vector<int> v(10, 1);
std::vector< std::vector<int> > vv(10, v);
auto vvit = vv.begin();

std::for_each(vvit, vv.end(), f);

到函数 f 重新应用 for_each 来处理内部向量整数

void f(const std::vector<int>& v) {std::for_each(v.begin(), v.end(), def);}

但 for_each 在 for_each 中

std::for_each(vvit, vv.end(), std::for_each((*vvit).begin(), (*vvit).end(), def));

仅用于整数的函数

void def(const int& i) { std::cout << i; }

没有。 (如果我尝试正确,也不能使用 bind。)编译器说 def 函数不能应用正确的转换,即从向量分配器(向量的位置指针?)到 const int&,前一个示例通过向量分离函数 f 实现了这一点.

这是复杂的还是微不足道的?

【问题讨论】:

  • 您的问题是什么?你想知道为什么这不起作用吗?为什么会这样?
  • 对不起,是的,为什么 for_each 不接受内部 for_each 作为函数参数,外部应用于外部向量,内部应用于 [each] 内部向量?所以这是微不足道的,为什么?
  • 在反思中,应该是'为什么 def 函数没有以它的参数与向量的整数匹配的方式应用'?
  • for_each 接受一个将元素作为其第三个参数的函数。 for_each(b,e,f)void 类型的表达式。因此,它不是for_each 的第三个参数的有效参数。
  • 我明白了,我想我需要听听。我会接受作为答案 - 谢谢

标签: c++ c++11 vector foreach


【解决方案1】:

最简单的解决方案是在 lambda 中传递 for_each

std::for_each(vvit, vv.end(), [f](std::vector<int> const& v)
  { std::for_each(v.begin(), v.end(), f); } );

但是有什么问题

for (auto const& v : vv) {
  for (int i : v) {
    f(i);
  }
}

【讨论】:

    猜你喜欢
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2020-12-19
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    相关资源
    最近更新 更多