Std::generate不能在Std::vector上工作
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); });
// ^^^^^^^^^^^^^^^^^^^^^
相关文章:
- 为什么我的 std::ref 无法按预期工作?
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };
- std::数组边界检查如何工作?
- C++ assigment std::list:<typename>:itrator 在 main 中工作,但在方法中它不起作用
- std::strlen 在内部是如何工作的?
- std::async 如何工作:为什么它会调用这么多次复制/移动?
- std::bind,无法让具有单个参数的方法工作
- 为什么"std::is_function_v"不能按预期工作?
- 不使用与左右停止工作命名空间 std 的简单比较
- 对 std::vector 的这种解读是如何工作的?
- std::notify_all_at_thread_exit 如何工作?
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- ZeroMQ 在使用 std::thread 创建工作线程时崩溃
- 使用 std::atomic 标志和 std::condition_variable 在工作线程上等待
- 通过参数启用时,std::enabled_if 如何工作
- 双向链表 std::unique_ptr 类在节点删除时无法按预期工作
- pybind11:无法让 std::list 在 Python 中工作
- std:任何没有RTTI的,它是如何工作的