我正在尝试生成int或double类型的随机数,然后将它们插入到一种容器向量中,列表到排序顺序 但问题是插入不起作用,我不知道为什么,所以你能帮帮我吗?
#include <iostream>
#include <iterator>
#include <random>
#include <vector>
#include<list>
#include<deque>
#include <algorithm>
#include <chrono>
using namespace std;
int random_gen(){
default_random_engine re { std::random_device()() };
uniform_int_distribution<int> dist;
auto r= bind(dist,re);
int x =r();
return x;
}
template<typename SequenceContainer>
void build_cont(const SequenceContainer& seq, int n)
{
for(int i=0; i!=n; ++i) {
int gen = random_gen();
//std::iterator<T> it=lower_bound(begin(seq), end(seq), gen);
typename SequenceContainer::iterator it;
it=find_if(seq.begin(), seq.end(), [it](){ return *it<gen;});
seq.insert(it, gen);
}
for(auto i:seq)
cout<<i<<endl;
}
int main() {
int n=10;
vector<int> v;
list<int>ls;
deque<int> deq;
build_cont(v, n);
build_cont(ls, n);
build_cont(deq, n);
return 0;
}
我现在得到的错误是链接器错误,所以我不知道出了什么问题?
答案 0 :(得分:4)
有两个问题:
您不能对SequenceContainer进行const引用,然后尝试获取非const迭代器或将项插入到该const引用中。删除const。
您需要在lambda capture子句中包含'gen',并且必须将该值作为参数:
typename SequenceContainer::iterator it = find_if(
seq.begin(),
seq.end(),
[gen](const int& val) { return gen < val; }
);