我最近开始使用像lambda表达式这样的新C ++ 11功能,以使我的代码更易于阅读。
在这个例子中,我想生成一个随机排序的数字[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表达式的正确方法是什么?
答案 0 :(得分:3)
听起来好像缺少#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(){
}
答案 1 :(得分:0)
您应该添加此编译器选项-std = c ++ 0x