相关疑难解决方法(0)

对std :: for_each实现的限制

在C++标准(std::for_each)的§25.2.4.2中:

template<class InputIterator, class Function>   Function
for_each(InputIterator first, InputIterator last, Function f);
Run Code Online (Sandbox Code Playgroud)

效果:将f应用于取消引用[first,last]范围内的每个迭代器的结果, 从第一个开始到最后一个 - 1.

  • 这是否意味着f 按顺序应用于容器的元素?
  • 如果是这样,libstdc ++并行模式是否违反了它?
  • 如果没有,为什么§6.5.4中基于范围的for循环没有实现为对std :: for_each的调用?(这将允许基于范围的for循环也由实现自动并行化)

c++ foreach c++11

10
推荐指数
1
解决办法
881
查看次数

可以将functor提供给std :: generate是有状态的吗?

最近我读到如果传递的仿函数是有状态的(有内部副作用),一些STL算法有不确定的行为.我已经将std::generate函数与类似(不太重要)的仿函数一起用于以下内容:

class Gen
{
public:
    explicit Gen(int start = 0)
        : next(start)
    {
    }

    int operator() ()
    {
        return next++;
    }

private:
    int next;
};
Run Code Online (Sandbox Code Playgroud)

这可以安全使用std::generate吗?生成值的顺序是否有保证?

编辑:声明在这里有状态的仿函数和STL:未定义的行为

c++

4
推荐指数
2
解决办法
689
查看次数

对于std :: generate,可以传递函数使用索引吗?

在一个问题中有点难以表达,所以我将使用一个例子.让我们说:

generate(myvec.begin(), myvec.end(), func())
Run Code Online (Sandbox Code Playgroud)

我可以拥有它,以便func()可以读取生成的索引,使得:

int func()
{
   if(index<2)
       return 1;
   else
       return 2;
}
Run Code Online (Sandbox Code Playgroud)

这样的myvec[0]=1, myvec[1]=1, myvec[2]=2, myvec[3]=2,..., myvec[N]=2

c++ vector

1
推荐指数
1
解决办法
829
查看次数

标签 统计

c++ ×3

c++11 ×1

foreach ×1

vector ×1