Я недавно начал использовать новые функции 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());
}
Однако использование g ++ 4.6 в Windows (с флагом -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()>)'
Как правильно использовать лямбда-выражение в этом случае?