![](/img/trans.png)
[英]Dereferencing not working for std::vector<std::vector<double> >
[英]std::generate not working on an std::vector
#include <iostream>
#include <random>
#include <algorithm>
int main()
{
std::mt19937 mt;
std::uniform_int_distribution<int> d(0, 255);
int l = 500;
std::vector<int> k(l);
std::generate(k.begin(), k.end(), d(mt));
return(0);
}
尝试使用g++ 4.7.2
和g++ 4.8.1
进行编译
g++ -std=c++11 main.cpp
报告的错误是
In file included from /usr/include/c++/4.7/algorithm:63:0,
from main.cpp:3:
/usr/include/c++/4.7/bits/stl_algo.h: In instantiation of ‘void std::generate(_FIter, _FIter, _Generator) [with _FIter = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Generator = int]’:
main.cpp:11:42: required from here
/usr/include/c++/4.7/bits/stl_algo.h:5083:2: error: ‘__gen’ cannot be used as a function
在这种情况下,我没有任何关于可能出错的线索或想法。
std::generate
接受一个函数对象并将其返回值应用于序列容器。 但是std::uniform_int_distribution<T>::operator ()
不返回一个函数对象,它实际上生成随机值并返回它。 如果你想传递一个仿函数,请使用lambda:
std::generate(k.begin(), k.end(), [&] { return d(mt); });
// ^^^^^^^^^^^^^^^^^^^^^
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.