generate_n在c++中使用lambda和back_inserter
generate_n using lambda and back_inserter in C++
我最近开始使用新的c++ 11特性,如lambda表达式,使我的代码更容易阅读。
在这个例子中,我想生成一个随机排序的数字向量[0到n]。我有一些类似于下面的代码
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
void _generateRandomIndices(vector<unsigned int> & indices,
const unsigned int & n) {
indices.clear();
unsigned int i = 0;
generate_n(back_inserter(indices), n , [&i] ()-> unsigned int{
return i++;
} );
random_shuffle(indices.begin(), indices.end());
}
然而,在windows上使用g++ 4.6(带有-std=c++0x标志)会抛出以下错误:
no matching function for call to 'generate_n(std::back_insert_iterator<std::vector<unsigned int> >, const unsigned int&, _generateRandomIndices(std::vector<unsigned int>&, const unsigned int&)::<lambda()>)'
在这种情况下使用lambda表达式的正确方法是什么?
听起来您缺少#include <algorithm>
,因为GCC 4.5.1以及MSVC10编译以下代码没有错误:
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
void _generateRandomIndices(vector<unsigned int> & indices,
const unsigned int & n) {
indices.clear();
unsigned int i = 0;
generate_n(back_inserter(indices), n , [&i] ()-> unsigned int{
return i++;
} );
random_shuffle(indices.begin(), indices.end());
}
int main(){
}
你应该添加这个编译器选项-std=c++0x
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 可组合的lambda/std::函数与std::可选
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 在 lambda 捕获中声明的变量的类型推导
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 模板函数指针和lambda
- 两组使用lambda函数的大括号
- 使lambda不可复制/不可移动
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 将带有unique_ptr的可变 lambda 传递给 const&std::function
- AWS Lambda C++运行时权限被拒绝
- 捕获lambda中的std::数组
- 这 4 个 lambda 表达式之间有什么区别?
- 在实现文件中使用头文件的通用 lambda
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?