【发布时间】:2020-01-08 19:19:46
【问题描述】:
为什么我的 lambda 没有将元素放入向量中?
void generate_N_numbers_in_the_vector(std::vector<int> &vec, int &M,
const int &N) {
std::random_device rand;
static std::mt19937 gen(rand());
static std::uniform_int_distribution<int> distribution(0, M);
vec.reserve(N);
std::generate(vec.begin(), vec.end(), []() { return distribution(gen); });
for (auto elem : vec) std::cout << elem << std::endl;
}
【问题讨论】:
-
因为它是空的。使用
.resize()。 -
在现代 C++ 中,您最好返回该向量而不是通过引用传递它 - 由于移动语义,它的效率不低,但可读性更高。例如,它可能会作为副作用解决您的问题(您可能会使用适当的 ctor 大小)
-
@Slava,如果在同一个向量上重复调用此函数,效率可能会降低。
-
@Evg 那么问题应该是“将随机元素添加到向量”而不是“填充向量...”